2020-03-15 | Subject | Limb Pulling
Let's pull apart a typical web service. Let's go down to the root of the system tree. Arguably the root of the tree started when Richard Stallman was frustrated with his AI lab's laser printer. He started writing a free version of tools, not UNIX, but UNIX-like, so he and his neighbors could have their own operating system. He set up a license to protect the rights of him and his neighbors, and the tree grew. Linus Torvalds added a kernel. The tree grew and grew, eventually including many different kinds of licenses, but the genesis was arguably Richard Stallman's frustration with the laser printer.
It is possible to compile an entire tree today, an entire, complete operating system and application stack from source using efforts like Linux from scratch. There are many dependencies, and things need to be done in a particular order. The libraries and compilers are in constant motion. If the libraries a compiler uses to compile a different version of a GUI widget change, it is quite possible that the GUI widget will fail. With distributed development effort this is a frequent problem. Recompiling the entire tree of source for a user is cumbersome.
The problem of dependencies was resolve by package managers: apt, yum, yast, etc. These package managers orchestrated compiled, compatible modules. If a user wanted to install a particular word processor, the package manager would install the compatible packages. Even the best package managers have dependencies that can't be resolved. As an example, if a word processor relies on GTK3, but it also uses modules that rely on GTK2, one either the word processor needs to be downgraded or the module needs to be recompiled for GTK3.
In addition to the core applications, libraries, and operating system that applications rely on, we weave applications together with various languages that also have modules with related dependency problems. Pip is used for Python, along with other alternatives. These language modules as well as the OS and application modules are written by people around the world.
Frameworks get their own special treatment. The licensing and intellectual property issues with various frameworks cause unique problems. Vendors attempt to lock developers into their frameworks. Some frameworks are purely open/free, but many are either dual-licensed with significant features locked, or some frameworks are not available to businesses without additional licensing. I don't mean to conflate free and ownership, these are two different issues, but they are related.
In addition to the OS, application, development stack, and frameworks, operating on a publicly accessible network is risky and complicated. Understanding load balancers, firewalls, capacity planning, disaster recovery, fail-over, security, etc. is a huge task. This is another reason why businesses are compelled to rely on cloud. There are many levels of complexity.
I lost steam on this one and abandoned. Perhaps I'll pick it up again later? I have some stuff to build.