There are some differences, but broadly correct (eg., the program is precompiled and the experience is definitely the best in VSCode; plus of course different language).
However, I heard of uPython being used in production deployments, though maybe not in millions of units.
The thing is, if you want to poke at a device interactively, your options are either Forth or (if the system is beefy enough) one of these scripting language ports; tethered C interpreters are not precisely commonplace. And while I love Forth to bits, most people will probably go the scripting-language route.
However, I heard of uPython being used in production deployments, though maybe not in millions of units.
(I'm working on DeviceScript)