 What is the UNIX philosophy and does it really matter? That's the topic for today's video because I get a lot of questions and comments regarding the UNIX philosophy and people want to know what I think about it. Do I adhere to the UNIX philosophy? What do I think about certain programs that maybe violate the principles of the UNIX philosophy? So let's break this down a little bit first. Let's define exactly what the UNIX philosophy is. Well, first of all, there's no real set in stone definition because a number of different important computer scientists and developers over the decades have kind of defined what the UNIX philosophy are, the basic principles of designing software for UNIX, yada, yada, yada. And because there's no set in stone definition and of course many people in the community, you know, just people like you and me, we kind of make up our own ideas of what exactly the UNIX philosophy is. But typically these days when people talk about the UNIX philosophy, it boils down to this simple definition here. A program should do one thing and do it well. So obviously what we don't want is a feature creep. We don't want a program that tries to do everything. It's the old saying, you know, jack of all trades, master of none, right? You want a program that is simple, that is small, that does this one task and that's all it does and it does this one task perfectly. In fact, the definition I just gave you about a program should be simple and small. That's kind of the philosophy behind developing software according to Eric S. Raymond. Eric Raymond, of course, is one of the founders of what we consider the open source movement. He was one of the founders of the open source initiative. And he actually is one of the people that really coined the term open source as it's defined today. Eric Raymond has 17 UNIX rules and these are 17 rules for developing software for UNIX. And many of them kind of tie into the UNIX philosophy because some of his rules include make your programs small, make your programs simple and build modular programs, right? So, you know, we can swap out parts, right? Modularity is very important according to Eric S. Raymond. Now, everything we've talked about so far I think really succinctly defines what the UNIX philosophy is, right? Do one thing, do one thing well. We're talking about simple, small, modular programs. But here's the thing with UNIX-like operating systems and specifically we're going to talk about GNU slash Linux distributions today is many of the programs, especially the most important programs on a GNU slash Linux system are not small, are not simple. Many of them are not modular, right? Many of them don't adhere to any principle that most people would consider part of the UNIX philosophy, right? Do one thing, do one thing well. And is that necessarily a problem? Is this an issue that needs to be addressed? Is it something that people should complain about? I think there are valid criticisms that some software, especially once we get into things like feature creep, you know, too many pieces of software try to do too many different things, but I do think people are very selective with the kinds of programs that they complain about when it comes to things that violate the UNIX philosophy because I'm going to talk about two pieces of software that I use that I either like or at least I don't have a problem with. One of them, obviously, SystemD. SystemD is in a knit system, but really it's much more than in a knit system. It is a complete suite of applications, right? It does much more than just be, you're a knit system. And I don't love SystemD. I don't hate it either. It's just a piece of software for GNU slash Linux distribution ships with SystemD as it's a knit system. I'm okay with it if it ships with a different a knit system. That's fine with me, too. I really don't have a dog in that fight. I know a lot of people have a problem because SystemD being this gigantic suite of applications, you know, more than a million lines of code and it does so many different tasks that really could be, you know, each task could be its own individual program. Why does everything have to be tied into this one massive thing that is SystemD? I get the complaint with it. Another program that I love is Emacs. GNU, Emacs, and people often talk about how Emacs is the antithesis to what the Unix philosophy is, right? Do one thing, do one thing well. And of course, Emacs is all things to all people. Emacs literally can be anything you want it to be. Emacs is essentially a Emacs Lisp interpreter. So anything that you write in Elisp in that particular language, Emacs can interpret it and you can make anything you want, you know, command line applications, GUI applications. Of course, the GUI applications can run inside a GUI Emacs window. Emacs can be your terminal and your file manager and your web browser and your video editor, your audio editor. It can be your window manager. It can literally be practically every major component of your operating system minus probably the init system in the kernel. Emacs can probably field the void of everything else other than, you know, the really base system components. Now, do people have a point when they say things like SystemD and Emacs violate the Unix philosophy? Yeah. I mean, according to their point of view, absolutely they're right. Does it matter? I mean, for me, it doesn't matter because I'm going to use Emacs anyway. And of course, it's again from a point of view because I could argue that Emacs really does one thing and one thing well, it's a Elisp interpreter. So if you write a piece of code in Elisp, it interprets it and does whatever it is that you are telling that program to do, right? It doesn't necessarily, it's not like it's everything to everybody out of the box. It's you kind of make it that if you want it to be. Now, I would say according to Eric S. Raymond's 17 Unix rules, and two of them were make programs that are small, make programs that are simple. SystemD is not small or simple and Emacs obviously is not small or simple either. So I get the complaints and I do know that the larger a program is, the more lines of code a program is. It's much more of an issue with diagnosing bugs. Security holes are much more prevalent in pieces of code or in programs that have large line counts. It's just natural, right? The bigger a program is, the more vulnerabilities are going to be in a program. That's just kind of common sense. Now the problem I have with the people that complain about the Unix philosophy, do one thing, do one thing, well, keep things simple, small, modular, is yeah, people love to complain about certain things. I gave two examples, SystemD and Emacs. People love to tell me how those programs violate the Unix philosophy. But there are so many very important pieces of software on your GNU slash Linux distribution that are exactly like SystemD and Emacs in this regard, and nobody ever complains about these particular programs. Let's start with GNU slash Linux. Let's break it down, GNU slash Linux. Let's start with the GNU core utilities, right? The core utilities, the core command line utilities on every single GNU slash Linux distribution. It's not simple, small, right? There's a million of these little programs, part of the core utilities. Well, not a million. There's probably, I don't know, what, 50, 60 core utilities? I'm not exactly sure the number of programs in the core utilities package, but it's a lot of stuff there. And I could make the same argument that the core utilities violate the Unix philosophy, but nobody ever really complains about that. I mean, I'm not going to say nobody ever complains about it. There are people that don't complain about it, but it's a very, very, it's very rare. I hear anybody make that argument about the GNU core utilities. And let's take the slash Linux part of GNU slash Linux. The Linux kernel is massive. Any argument you can make against SystemD, you can make that argument 10 times better talking about the Linux kernel because, you know, do one thing, do one thing well. No, the Linux kernel literally does everything. It does everything you could possibly want an operating system kernel to do. And that's great. It's what makes our operating system so fantastic is because it supports so much stuff. That's why it's the greatest operating system in the world, according to me. Now, is it a problem that there's so many millions of lines of code in the Linux kernel? No. I mean, are we going to remove lines of code just to adhere to some weird philosophy if removing a lot of this code also kind of jumps our operating system to where it doesn't support as much hardware as it used to? No, I don't think anybody would want to make that trade. Another perfect example of software that violates the Unix philosophy of do one thing and do one thing well, desktop environments. How many of you guys are watching this video right now? Use a full desktop environment. I'm talking about the full GNOME meta package, the KDE Plasma meta package, XFCE, Budgie, Cinnamon, all of those desktop environments that are this big meta package of all of these programs that are shipped together with this suite of applications. Did you ever think that that's not really modular or simple or small or it's not a do one thing, do one thing well? That's kind of why I love standalone window managers. All of my tiling window managers is because I can pick and choose the components and create my own custom desktop environment. But I have never seen anybody complain that desktop environments like GNOME or Plasma violate the Unix philosophy. I've never seen anybody make that argument, although I could make that argument if I really wanted to. A really good example of a piece of software on our GNU slash Linux systems that violate the Unix philosophy would be X11, the X server, right? Our display server. It's a massive program. It's actually a massive suite of programs. It's got a ton of stuff. If you've ever had to install like a base arch install or if you do like a source base distribution like Gen2 and you install X11, you know, it's a lot of programs that have to download and compile and nobody ever says, well, you know, it's it's violates the Unix philosophy. No, we don't complain about something like X11 because at the end of the day, I need a graphical display as part of my operating system. And you don't complain about things violating the Unix philosophy also unless there's an alternative. And really, you know, all we have on Linux is X11. Wayland is in development. It's kind of still beta. It'll eventually get there. But even Wayland like I could make the same argument. Wayland is going to be just like X11. It's going to be a whole bunch of programs that try to do a whole bunch of different stuff. It's going to be a whole lot of lines of code. And the fact that Wayland is going to be partly developed by a lot of the folks at Red Hat who helped develop system D, which people love to complain us too much. It wouldn't shock me if there's, you know, some some crossover there. Again, people are selective. I could say Blender. Blender, the animation software does 3D modeling and animation. Heck, it does video editing. I could even do 2D imaging in Blender. It does a ton of stuff. It's like a multi-tool, right? It should do one thing and one thing well, but it doesn't. But Blender is a fantastic piece of software. Nobody, I've never heard anybody say a negative thing about Blender. Most modern video editors these days come with extra features that they used to not come with. For example, in many video editors now, you can also edit audio, which is interesting, right? You can mix audio and just EQ levels and do compression and normalization and things like that where you used to follow the UNIX philosophy. You would have a video editor to edit video and you would have a separate program, an audio editor to edit audio. And then, you know, in your video editor, you would render the video and audio together to eventually get your video. But nowadays, you don't really need a separate video editor and audio editor. Most video editors are also audio editors, so they certainly would violate the UNIX philosophy. And any web browser, most modern web browsers are going to violate the UNIX philosophy. Many of them contain extra features, most features that people don't even use. So many web browsers now come with web mail clients, email clients that nobody uses. RSS feed readers and news sites and things like Pocket on Firefox. You're getting served all these news articles and you've got support for various non-HTTP protocols, you know, things that are not necessarily web protocols, right? You've got all this stuff built into your web browsers now where they're not doing one thing and one thing, well, right, a web browser really should just be a web browser. It should browse the web, it should be able to render HTTP and HTTPS sites. And that's it, but your web browser does so much more. That's why these programs like Chromium and Firefox are such massive programs, you know, that take hours to compile on a source-based Linux distribution. Thankfully, most of us run binary distributions, so most of us are not aware on how big a program a web browser actually is, but they take many, many hours of compilation. So ultimately, what are my thoughts on the Unix philosophy? I actually like the Unix philosophy. I personally, I would try to adhere to it as best I could if I was a developer writing my own programs. I do like the idea of keeping things simple, small, modular, and I like the idea of do one thing, do it well. I think it makes developing software a lot easier. I think it makes diagnosing problems a lot easier. I think it makes it easier for the end user. I think it makes it easier for especially the power user, if he's an end user, because the power user can take these simple, small, modular programs and chain them together, you know, pipe them sometimes, you know, pipe output from one simple program as input into the next simple program, you're right, which, you know, these big, massive programs, they really, they don't offer that kind of flexibility. Now, having said that, that I like the Unix philosophy, I really don't care if people violate the Unix philosophy either because it's one of those things. Why do we run free and open source software like GNU slash Linux? Well, we run free software because it's free, right? And when I talk about free, free as in freedom, right? You have the freedom to do whatever the hell you want with your operating system, right? So use whatever piece of software you want. I don't care. Nobody else should care what you use. You shouldn't really care what I use, right? You do you and be happy with it. Be proud that you use the software you use. If you're developing software, if you want to adhere to the Unix philosophy, great, if you think it has merit, absolutely develop with those goals in mind. If you think the Unix philosophy doesn't make sense, right? Then that's fine too. You know, make these big, massive, giant programs that do a whole bunch of stuff. These jack of all trade programs. That's fine. This is not an ironclad rule. Like, you know, if you violate the Unix philosophy when you're developing your software, we're going to come after you, right? We're going to persecute you in some way. No, you're free to make whatever kind of program you want to make. And I think really what I want people to think about is how selective we are when we talk about things violating the Unix philosophy, because it's almost like we take this Unix philosophy idea. And some of you guys have weaponized it, right? And you selectively go after certain targets and other targets you just let slide. And although I like the Unix philosophy, it's not an ironclad rule. Nobody has to follow it. That's the point of freedom, right? This is about freedom, free software, free is in freedom. It's about freedom, baby, right? You can do whatever the hell you want. It's one of the reasons why people often tell me it like my shells that I use like fish. It's not POSIX compliant. It doesn't follow the POSIX standard. Who cares? Who decided that everybody has to follow POSIX? And who decided everybody has to use the Unix philosophy? Freedom. We have the freedom to choose to follow these guidelines that people set out. Or we also have the freedom to, you know what? I think that's the wrong idea. I'm going to go this other direction. And that's how innovation works, right? We don't stagnate and stay the same because if we just follow the same old tired rules, GNU slash Linux is never going to evolve into something more. And I think it would be sad if GNU slash Linux didn't continue to evolve and to grow because even though we've come so far in the years that I've been running Linux as my main operating system, we still get a long ways to go, right? There's still major improvements that we can make. And I don't want people to stifle innovation by being so dogmatic with a lot of these rules. Now, before I go, I need to thank a few special people. I need to thank the producers of this episode. And of course, I'm talking about Devin, Dustin, Gabe, James, Maxim, Matt, Michael, Mitchell, Paul, Scott, West. Why ya bald? Homie, Allen, Armoredragon, Chuck, Commander, Henry, Di, Yo-Kai, Dylan, George, Lee, Linux, Ninja, Mars, Drum, Mike, Erion, Alexander, Peace, Archon, Hador, Polytech, Realiteats for Lust, Red Prophet, Stephen, and really these guys. They're my highest tiered patrons over on Patreon. Without these guys, this episode would not have been possible. The show is also brought to you by each and every one of these fine ladies and gentlemen. All these names you're seeing on the screen right now. These are all my supporters over on Patreon because I don't have any corporate sponsors. Let me get in frame here. It's just me and you guys, the community, if you like my work. Subscribe to Distro Tube over on Patreon. Alright guys, peace.