I have a friend who is a hardware engineer. Every time I see this friend I wonder about how much is going on inside the hardware of whatever laptop or server I might be using. Other times I kind of “don’t pay much attention” to the hardware. Isn’t that the same for most of us these days?
Awhile back another younger friend and I had a conversation about front end engineering and modern web applications. When the subject of operating systems came up, my younger friend said, simply, “I prefer to abstract them away.” These words have stuck in my mind. Is “abstract them away” the polite way to say “don’t pay much attention?”
A few years ago I attended a talk by Paul Vixie. His presentation was about the internet becoming “a dumb pipe” because of the universal presence of encryption. He suggested that observing someone’s computer use now needed to be done at the endpoints, either prior to encryption or after decryption. Does all this mean that the contents of network transmission might well be “abstracted away?” Does the “dumbness” of the modern network mean that we now need to focus our attention ever more directly toward hardware?
Linux Distributions Are Wonderful!
Like so many of you, dear Readers, I have, over the years, used quite a few different Linux distributions. Each distribution has wonderful aspects! I love that Debian is so free. Red Hat has Rawhide. Ubuntu is easy to get working when your hardware needs proprietary drivers. Gentoo lets you know that your system can compile every program you use. Linux From Scratch teaches you even more about how the system interacts. Other distributions each have their own great features, a different C library, static binaries, a beautiful default GUI, more. . . .
In recent days I have been working with wonderful customers who have purchased VPS services. One thing I have learned is that each of these wonderful customers has his own preference for Linux distribution and for server setup. And that’s fine!
|– Networking Setup
However, in Linux setups I have done for myself, I can, of course, try crazy things. One such crazy thing I have come to appreciate is that there exists a distribution agnostic way to set up networking. Despite that each distribution has its own wonderful group of commands for getting networking set up, it nevertheless seems possible to use the iproute2 suite in every distribution. So, sometimes, I just use the iproute2 suite instead of the distribution’s networking tools. Have I “abstracted away” the networking portions of the distributions?
|– Package Systems
Beyond distribution specific networking setup, every distribution also has its own wonderful package system. So it’s a different command to install a single application on different distributions. And each distribution’s package system groups software applications with other software applications in different ways.
Also, default configurations differ when the same software is installed by different package systems. Indeed, the package systems of the different distributions are themselves written in different languages such as Perl and Python.
How could we “abstract away” the distribution specific package systems? How could we install applications without using a package system? We could try at least: static compilation, interpreted languages, and containerization.
Static Compilation
Sometimes it is possible to make an application which runs on various distributions by compiling statically so that the needed libraries are provided with the application itself rather than having the application depend upon possibly different libraries in various distributions.
One issue with static compilation is that the libraries typically do not get updated individually and quickly as happens with the libraries provided by distributions for dynamic linking.
A related solution is to link statically to some dependencies but not to all. This approach of partial static linking is adopted by the Holy Build Box used to compile the famous yabs.sh bench script.
Interpreted Languages
Besides static compilation, another method of Linux distribution and even operating system agnbostic application installation involves interpreted languages such as Java, Javascript, and Python. An interpreter is provided for each different operating system. The same application code then works everywhere thanks to the operating system specific interpreters.
Containerization And Self Hosting
In recent years containerization has become widely accepted as a yet another solution to the issues involved in getting application programs to work well anywhere among different Linux distributions and on non-Linux operating systems. Examples of containerization projects include LXC and Docker. Docker has become very popular. Docker containerization provides a uniform operating environment which allows Linux distribution and even operating system agnostic application installation.
Last month we had a thread on Low End Talk called What are you self hosting? This thread discussed the large number of applications people were self hosting, many in Docker containers.
A few days ago I learned for the first time about CapRover, an “application and database deployment and web server manager” which uses Docker.
There’s another article in the works here at LEB to introduce CapRover’s amazing One-Click web interface which allows installation 200+ applications.
There’s a second article planned here at LEB about installing Docker and CapRover on Slackware Linux, perhaps the oldest Linux distribution still available.
Probably it won’t be surprising that the Docker install on Slackware might be distribution agnostic? Hopefully the Docker install will permit CapRover to work on Slackware, to install 200+ applications with a One-Click web interface on the oldest Linux distribution.
Concluding Questions
At the beginning of this post we talked about abstracting hardware away. Now, with the possibility of CapRover running inside Docker on Slackware, will this mean that Slackware has been abstracted away? Does the real possibility of distribution agnostic network configuration plus operating system agnostic application install via a web interface mean that all operating systems have been abstracted away? Does the CapRover web interface mean that everything but the browser has been abstracted away?
Postscript: Back To Hardware?
Mindful of Paul Vixie, I keep returning to listen again to Oxide.computer’s On the Metal podcast from December 15, 2019 with Ron Minnich, the “Godfather of Open Firmware.”
The podcast has a wonderful discussion of the history of firmware, open firmware development beginning in the late 1990s through the early 2000s, and the current closed source, binary blob scene. At 54:07 the System76 laptops are mentioned, followed by Chromebooks at 55:38. Here’s a snippet from the transcript beginning about 55:45 discussing System76 laptops’ somewhat open boot system and then the Chromebooks’ verified boot system. Ron Minnich is speaking:
They’re quite incredible. I’m going to [unintelligible 00:55:48]. System76, what I like about them is they started from a point of, “Let’s do the right thing. We’re going to build open systems, and they’re going to run Coreboot. We’re going to figure out how to make that work,” and they follow the same path that everybody has to follow. You’re going to get something designed by someone else, and you’re going to make it work for your needs.
What the folks there I talked to said is, in a lot of ways, that the newest ones are the ones where they really had a huge amount of impact on the design of, and I think they’re just nice units. They feel nice when you hold on that kind of thing, but further, I can get cloned with Coreboot repo, I can build a firmware image for a System76, I can burn it on that machine.
If I’m in a company where I don’t want to believe what might be in the firmware, I can just burn it again. This is really interesting to, I think, anybody who realizes how bad the attacks you can put in firmware are. System76, what’s really cool about them too is, you got a lot of configurability in terms of how much memory, how much NVMe, that kind of thing, and what distro you’re on.
Chromebooks have absolutely, in my opinion, and I’ve worked with them for a long time now, have completely and utterly nailed building a thing that when it turns on and puts up a screen that doesn’t have a warning on it, I can believe it’s running the right software, right?
Right now I am using a Chromebook to write this post. Next time I need a new laptop, I might look at System76 and other more open firmware laptops. It might be lovely to have a laptop which didn’t push hardware abstraction! :)
Related Posts:
- What is “aria-label”? And why you need to use it. - August 12, 2024
- HostSailor Greenhouse (NL) Fujitsu Primergy Dedicated Server Review - October 23, 2022
- How Much Faster Is Making A Tar Archive Without Gzip? - October 7, 2022
I heard from my friend about your article, it was really helpful. I hope you continue to write more great articles. Thank you very much
Hi garlic phone! Thanks for your kind words! Best wishes! Tom
OPS versus OSI, it’s almost like going back to the frame relay days, no you don’t get access to the abstraction. Is it that we don’t want to, or that is *not not* allowed but soooo much work?