The number and variety of npm packages were always a topic for irony and ridicule. If you are not getting what I am talking about, check out the is-odd npm package with 76 million downloads, is-positive/is-negative packages, literally a package to bless your code and many others. While this seems funny, this poses a serious problem, which may lead to negative consequences. But this time, the community pushed even further and introduced NodeOS, an “operating system powered by node.js and npm”. I am going to explain why this is not true and what it says about the JS community.
Powered by Node.JS and npm?
Let us start with the wording. I am not trying to be picky, but this is an intentional effort to deceive people that must not be allowed. NodeOS is not “powered” by NodeJS and npm. It is powered by Linux and simply runs NodeJS. That is it, seriously. All NodeOS does is starting NodeJS instead of bash/sh/zsh, otherwise, it is your regular Linux distribution. NodeOS is not “an operating system built entirely in Javascript” in any way, shape or form. This is a rip-off of Linux that is trying to get credit for effort that was never done. Do you know how many JavaScript source files an “operating system built entirely in JavaScript” has? One. With 161 lines.
While building a Linux distribution is not trivial, it is something that is well documented and standardized. It should not be treated as a breakthrough, a new OS or even a new library. The point of creating new Linux distributions is to address some problems that are not addressed in the rest of them. For example, Ubuntu is designed to be user-friendly, Alpine is small and fast enough for container environments, openSUSE offers enterprise-level support. NodeOS offers … JavaScript?
What problem does it solve?
Since NodeOS boots directly to NodeJS CLI and offers “NodeJS as userspace”, you would assume it is really great for running JavaScript applications. You know, the backend ones.
Unfortunately, this is just not true. There are no use-cases for NodeJS CLI over bash, npm over apt-get, an interpreter over an operating system. By letting go of a regular Linux shell (which was not done in any other Linux distribution (!)), you are letting go of everything people love Linux for. Say, for example, you launch your Express.JS backend in a docker container running NodeOS and it crashes. You attach to the container to investigate, and then what? Yes, the NodeOS team reimplemented some core commands such as cd, ls, cat, the full list here, but why reinvent the bicycle? The conventional versions of these exist, they were tested and used for decades, they were perfected beyond NodeJS’s wildest dreams, what NodeOS possibly has to offer here?
Additionally, most of the time the container running the backend will need some non-JavaScript packages as well. I am not talking about databases, they should be running on a separate container, but the necessities such as Git, nginx or another language are ofter used. How do you install them with npm?
Maybe it is performance?
Sounds reasonable. A Linux distribution running NodeJS as PID 1, it should probably be faster at running JS applications. Only two issues here:
- There is no mention of a performance boost on NodeOS’s website, nor any benchmarks. For an issue as big as performance (especially in the era of cloud computing), this looks sketchy. And it would be reasonable for a beta version, but it had reached version 1.0!
- Programs such as bash, which is used as a command prompt in most Linux distributions, grep, which is a search and filtering tool, apt-get which is a package manager, etc, were written in C (1), and were written for computers much, much slower than the ones we have now (2). I seriously doubt that some JS developers could write something that would perform better.
Harm to the open-source community
Not only this project is pointless, but it also hurts the open-source community, despite being open-source itself. The nature of this paradox is that instead of helping the maintainers of the Linux kernel itself and addressing specific challenges important to JS developers, all this effort is used to create yet another JS package/Linux distribution. Right now we are left with thousands of abandoned projects/libraries/operation systems for this very reason: developers choose to reinvent the wheel, fueling their egos, instead of working for the greater good.
Then how come?
Beats me. Not only it has 6.1k stars on GitHub, but it is also said to have won the 9th National Free Software Championship. This says a lot about the JS and FOSS community, and, being a part of it, I feel uneasy and shamed. The lowered bar for entry is good, but we should always try to be the best developers we can be and not appropriate other’s achievements. This reminds me of a Russian programmer who renamed Ubuntu to BolgenOS in its source code and introduced as a revolutionary new operating system back in 2009. We were laughing back then, but it does not seem so funny anymore.