Software engineer, functional programming enthusiast.
I can explain the difference between X11 and Xorg with an analogy to the web and web browsers: X11 is like HTTP, Xorg is like the Chrome browser. X11 is the protocol, Xorg is software that implements that protocol.
X11 is old, it was designed back in the 1980s and includes messages for drawing lines and circles and fonts on the screen. Also, back then there were a lot of "thin clients", computers that were basically nothing but a browser, since graphics were computationally expensive and could not be done on the client computer, graphics rendering was done server side. There are lots of messages in the protocol for handling screen updates over a computer network.
Nowadays, all personal computers are powerful enough to render their own graphics, and no one needs the display server to draw individual lines or circles on screen. Vector graphics and fonts are done at the application level, not over the network. So these these messages specified in the X11 protocol are hardly ever used. Really, most of X11 (let's say 90% of it) is not used at all, only the parts where the keyboard and mouse are defined, and how you can allocate memory to buffer a graphic and copy that buffer to the display. But you still need to maintain the Xorg software to handle everything that X11 specifies, and this is just a waste of code, and a waste of time for the code maintainers.
So basically, they decided about 10-15 years ago that since no one uses most of X11, let's just define a new protocol (called Wayland) that only has the parts of X11 that everyone still uses, and get rid of the 90% of it that no one ever uses. Also, the protocol design takes into account the fact that most modern computers do all of their own rendering rather than calling out to a server to render for them. Also the Wayland protocol design takes into account that a lot of computers have graphics cards for accelerated graphics rendering.
Since the Wayland protocol is much simpler, it is easier for anyone to write their own software which implements the protocol, these software are called "compositors." Finally, 10 years after some of the first implementations of Wayland, the protocol and compositors are becoming mature enough that they can be used in ordinary consumer PCs.
I don't understand this guy's argument at all. First of all, he isn't using any shell that I know about, he seems to have invented his own, and the command line arguments he uses are specific to his own shell. He doesn't explain how these command line arguments work in terms of POSIX system calls, so I can't follow along with what he is actually doing. As far as I can tell, these are security issues with his own software, not with Unix or Linux.
If you are worried about file mutability, you can use ZFS or BTrFS or BCacheFS. All of these filesystems have a snapshot function, so if any changes (e.g. file encryption by ransomware attackers) are made you can reboot and roll back the changes, unless the attackers figure out a way to get root access and delete your snapshots. But if an attacker has gained root access to your computer, that is a much more serious issue and not really in the scope of filesystem security or file mutability.
The snapshot and rollback feature also exists in NixOS and GuixOS, where your operating system kernel and all software installed is part of a snapshot that can be rolled back, if the system becomes unbootable, you can rollback from within the GRUB boot loader. Again, all software installation is managed by a service that runs for you at root level so you never need sudo
to install software, and the software you install never effects any other user or the operating system. So the only way to hack this is to gain root access and alter the content of the Guix or Nix "store" database with malicious code, but again, root access is a much bigger issue than what we are talking about.
So yeah, the argument stated in this video makes no sense to me.
You mean, there are still websites that don't auto-detect what OS you're running and make you actually choose?
Yes, it is mostly appliances, but an (informal?) stated goal of NetBSD is too run on all computing hardware.
Naturally, that makes NetBSD a good choice for appliances, especially ones that might only have limited memory.
(Here is a quick explainer on the difference between Jails, Zones, Containers, and VMs)
EDIT1: someone pointed out to me that ZFS is not supported on OpenBSD. Sorry about that everyone.
EDIT2: there is a ZFS driver for NetBSD
Applications without source code don't exist.
Oh, they meant, "you should have the source code to the applications you use." Well in that case, good call on them.
No, it is because people in the Linux community are usually a bit more tech-savvy than average and are aware that OpenAI/Microsoft is very likely breaking the law in how they collect data for training their AI.
We have seen that companies like OpenAI completely disregard the rights of the people who created this data that they use in their for-profit LLMs (like what they did to Scarlett Johansson), their rights to control whether the code/documentation/artwork is used in for-profit ventures, especially when stealing Creative Commons "Share Alike" licensed documentation, or GPL licensed code which can only be used if the code that reuses it is made public, which OpenAI and Microsoft does not do.
So OpenAI has deliberately conflated LLM technology with general intelligence (AGI) in order to hype their products, and so now their possibly illegal actions are also being associated with all AI. The anger toward AI is not directed at the technology itself, it is directed at companies like OpenAI who have tried to make their shitty brand synonymous with the technology.
And I haven't even yet mentioned:
The technology could be used for good, especially in the Linux community, but lately there has been a surge of unethical (and sometimes outright criminal) uses of AI by some of the worlds wealthiest companies.
I wouldn't worry too much about the package manager, just worry about whether the distro has a good package repository. If it has all the software you want to use, then use it. In my opinion, most package managers (dnf, apt, pacman, xbmp) are basically the same, and you would only notice a big difference if you ever tried to make your own package for your own software.
That said, a few package managers are very different from all the rest:
prt-get
": simple and stupid: just downloads and installs tar archives.emerge
": builds all software from source code when you install it. This provides some guarantees that the source code was not tampered with by the distro maintainers, this is great if you need to review all of the source code that is running on your system, but terrible for most people who don't want to spend so much computing power on compiling stuff every time you do a software update.My personal preference: I use ordinary Debian or Ubuntu to install the critical software that needs to be stable and reliable, and I use Guix OS on the side to install the bleeding-edge things that might break a lot.
It can even start the receiving daemon if it is not yet running.
We have a tool for that, itβs called an init system.
The init system is for trusted system services that can talk directly to hardware. Unless you are working on a single-user system with no security concerns of any kind, you might consider using init to launch persistent user land or GUI processes.
DBus is for establishing a standard publish/subscribe communication protocol between user applications, and in particular, GUI applications. And because it is standard, app developers using different GUI frameworks (Gtk, Qt, WxWidgets, FLTK, SDL2) can all publish/subscribe to each other using a common protocol.
It would be certainly be possible to establish a standard place in the /tmp directory and a standard naming scheme for sockets and temporary files so that applications can obtain a view of other running applications and request to receive message from other applications using ordinary filesystem APIs, but DBus does this without needing the /tmp directory. A few simple C APIs replace the need for naming and creating your temporary files and sockets.
Non-gentoo user: βWelp, Gentoo is now just another Arch fork LMAO!β
To be fair, you can still build packages and fine-tune the builds with the Emerge system flags, which is sort-of Gentoo's killer feature. It is just that they have recognized that most people will install probably 99% of all software without changing the default flags, and so why not give them those packages pre-built.
So I guess this make Gentoo more similar to Nix OS or Guix OS but without the high-tech package manager and dependency resolution.
So I think Guix (and Nix) is the most technologically advanced package manager in existence, and I hope someday all package managers work like Guix.
One other very interesting feature about Guix (which I don't think Nix is doing yet) (which Nix also does) is that they have implemented a fully verifiable bootstrap, meaning every step of building the kernel, including the steps taken to build the C compiler toolchain, are produced by code that is simple enough for a group of humans to check for correctness and safety. Also, every step of the build process exists in the package repository, with no reliance on externally built binaries for anything, not even the C compiler toolchain. They accomplish this with a multi-phase bootstrap process, where a smaller, simpler C compiler is used to build GCC.
Do I use Guix? Well, no. Simply put, it is not quite to the point where it just works on a lot of the computer hardware that I own. With a bit more work, with a few more developers, and a bit more money invested, Guix could pretty soon become as reliable and useful as Debian or Fedora. But it is not quite there yet. And frankly, I have other more important things to do than worry about debugging problems with the operating system I am using.
I only skimmed your article, but so far I like what I am reading, and how you dovetail it into a discussion about UBI and so on.
But one quick criticism: if I were you I would try to get a bit more well-versed on the difference between "free-as-in-free-beer" software, "free-as-in-freedom" software, and "open source" software. There are lots of articles about this, especially at the The Free Software Foundation. But in short:
This is not a very good question. If you are concerned about security you need to think about what specifically you are trying to keep safe? Here are some examples of different security scenarios:
Each one of those questions has different means of securing the computer. With question 1, it is not so much a matter of desktop environment, rather it has more to do with using full-disk encryption, setting a boot password in UEFI, and always having your lock screen enabled.
With question 2, this is a much more difficult task and you would probably be better off running apps in a VM, or carefully crafting your "Security Enhanced" Linux profile -- or not using Linux at all, but using FreeBSD which allows you to run apps in jails.
With question 3, be more careful with filesystem permissions and access control lists, setup your sudoers file properly, and use a desktop environment with better security auditing like Gnome or KDE Plasma.
The main difficulty I have with Rust (what prevents me from using it), is that the maintainers insist on statically compiling everything. This is fine for small programs, and even large monolithic applications that are not expected to change very often.
But for the machine learning projects I work on, I might want to include a single algorithm from a fairly large library of algorithms. The amount of memory used is not trivial, I am talking about the difference between loading a single algorithm in 50 MB of compiled code for a dynamically loadable library, versus loading the entire 1.5 GB library of algorithms of statically linked code just to use that one algorithm. Then when distributing this code to a few dozen compute nodes, that 50 MB versus 1.5 GB is suddenly a very noticeable difference.
There are other problems with statically linking everything as well, for example, if you want your application to be written in a high-level language like Python, TypeScript, or Lisp, you might want to have a library of Rust code that you can dynamically load into the Python interpreter and establish foreign function bindings to the Rust APIs. But this is not possible with statically linked code.
And as I understand, it is a difficult technical problem to solve. Apparently, in order for Rust to optimize a program and guarantee type safety and performance, it needs the type information in the source code. This type information is not normally stored into the dynamically loadable libraries (the .so
or .dll
files), so if you dynamically load a library into a Rust program its type safety and performance guarantees go out the window. So the Rust compiler developers have chosen to make everything as statically compiled as possible.
This is why I don't see Rust replacing C any time soon. A language like Zig might have a better chance than Rust because it can produce dynamically loadable libraries that are fully ABI compatible with the libraries compiled by C compilers.
To do Android development, I got myself a Banana Pi, which is a Raspberry-Pi like single-board computer. They provide you with a rooted Android OS image that you can flash onto the device, and you can install whatever else you want onto it. I give it it's own display and keyboard, but can also SSH-into it and control it from my other computers.
Also every manic pixie dream girl
So much this.
Also, its not just Bart Simpson, it is Homer too.
It is very typical of package management schemes for various software platforms. Java is like this, and so is Android. Prior to Gtk v3 (I think) the GConf Manager utility also organized app configurations this way. The DBus inter-process communication mechanism also uses this scheme to create a namespace for all possible applications in the system that might want to use the bus service.
It is what it is, I neither like it nor dislike it.
"in the spirit of continuous improvement, I recently embarked on a quest for re-evaluation and potential enhancement."
Oh boy, wait until you discover that Emacs can do terminal emulation, terminal multiplexing, text editing, file management, and app launching, all configurable and scriptable with a single, powerful programming language... and allows you to record keyboard macros that run across all of the above features. You'll go down a rabbit hole from which you will never emerge.
I wrote a few articles on my blog for people in your situation, who are mostly only familiar with Windows and/or Mac and want to learn Linux more in depth.
"Advice for people who want to learn linux" -- This article is kind of an overview of the Linux learning process. The point of this article is to teach you what it is you need to learn about so that you set your own curriculum. Once you understand what a few of the basic things are, you can look up your own tutorials on how to learn each thing.
"How to pick a Linux distro" -- This article is for people who are overwhelmed by the number of choices for Linux distro. The bottom line is: don't over-think it, just pick a mainstream distro like Mint, Ubuntu, or Fedora. There is like a 99.99% chance that each of these will just work as soon as you install it, no weird issues with audio, graphics, WiFi, BlueTooth, security updates, or anything else. Also, a lot of the "choices" you see among all those distros are only skin deep -- differences in the default theming (i.e. the default "desktop environment", a concept explained in the "advice" article above). But really they are all using the same basic software packages so there very little substantive difference between any of them except in their app stores, and the mechanism they each use install software.
If you have any questions, feel free to ask me here. I can clarify here, and also update my blog posts if you think anything is confusing.
Must try distros: Fedora, Mint, Void. But seriously, if you are using Nix to begin with, why use anything else? Nix is as good as it gets. If you really want to do a combo, I would recommend Fedora or Mint using Nix as just the package manager and not the hypervisor. All distros are basically the same nowadays.
Must try desktop environments: Xfce, Cinnamon, Gnome, KDE Plasma
We are forming communities on the realized image of the internet that we were told we would have back in the 80s and 90s.
Exactly! Back in the 80s, tech enthusiasts would run their own dial-up message boards in their homes. The Fediverse is like that, but with all the benefits of modern technology. Anyone can run their own instance if they have a decent internet connection (usually fiber). But it is more than just message boards: they can run Lemmy, Mastodon, Wordpress, and even things like Tor and NextCloud, and instantly contribute their computing resources to the larger Fediverse community.
It would be easier for me to understand if you can explain how this is different from the various other methods of installing software onto a computer.
Emacs.
Emacs is an app platform in and of itself, and the vanilla installation comes with dozens of its own apps pre-installed. Like how web apps are all programmed in JavaScript, Emacs apps are all programmed in Lisp. All Emacs apps are scriptable and composable in Lisp. Unlike on the web, Emacs encourages you to script your apps to automate things yourself.
Emacs apps are all text based, so they all work equally well in both the GUI and the terminal.
Emacs comes with the following apps pre-installed:
Some apps that I install into Emacs include:
This article seems to be written by ChatGPT. Confirmed human author.
If you are indeed a real human, I am sorry. May I ask why you think Cinnamon is better for tech-savvy moms than something like KDE Plasma or Gnome? Do you think desktop environments more similar to Microsoft Windows are better for moms?
Don't get me wrong, I love Cinnamon DE, it is my second favorite DE (Xfce is my favorite). But I would think something like KDE Plasma is probably a bit closer to the Microsoft Windows user experience.
Better Wayland support across the board, but also more Wayland compositors and window managers from which to choose. I'd make my own but I know so very little about Wayland right now and it would take me a while to learn.
Also, I have always wanted desktop environments to be more like Emacs, i.e. to be fully programmable in a Lisp language like Common Lisp or Scheme, where you can just whip-up a GUI app for anything you want in a few minutes with a few lines of code. Operating systems like that existed back in the 1970s and 80s, but went extinct when Windows and Macintosh took over everything, which were never designed to be programmable by end users. It sucks because there hasn't been anything like it ever since.
To see what I am talking about, check out the historical preservation projects for Lisp Machines like the InterLisp Medley desktop environment or the CADR ZMacs editor.
I am happy for you. Windows really is a piece of shit lately, and given how easy it is to switch to Linux nowadays, it is pretty amazing to me that more people haven't done it.
I used to use the command line, Bash, Awk, Sed, Cut, Grep, and Find (often piped to one another) quite often. I can recall that the few times I used Awk was usually for collating lines from logs or CSV files.
But then I switched to using Emacs as my editor, and it gathers together the functionality of all of those tools into one, nice, neat little bundle of APIs that you can easily program in the Emacs Lisp programming language, either as code or by recording keystrokes as a "macro."
Now I don't use shell pipelines hardly at all anymore. Mostly I run a process, buffer its output, and edit it interactively. I first edit by hand, then record a macro once I know what I want to do, then apply the macro to every line of the buffer. After that, I might save the buffer to a file, or maybe stream it to another process, recapturing its output. This technique is much more interactive, with the ability to undo mistakes, and so it is easier to manipulate data than with Awk and shell pipelines.
I wonder if that dip in Windows in April, going down to like 62%, and the correlated boost for "Uknown" operating systems to 13% might somehow simply be Windows not being recognized properly and categorized as unknown?
It seems a bit far-fetched to me that a bunch of Windows users would for 1 month suddenly all decide to use ReactOS, FreeDOS, BSD, Solaris, Illumos, Haiku, Redox, and Plan 9.
See if you can just re-install a desktop environment. Try sudo apt-get install --reinstall gnome
(or maybe cinnamon-desktop-environment
, whichever you prefer). Then reboot, see if that does anything.
I'm a communist but I suddenly realised that American conservatives should all be hardcore Linux enthusiasts. Why is this not already the stereotype?
Libertarians and conservatives in the US demand liberty only for the already wealthy and powerful upper class, the liberty to enslave and exploit whomever and whatever they choose. They believe the ultra-wealthy have somehow earned the right to do so. On the contrary, the socialists, especially the anarchists, are opposed to unjust hierarchies, and the hierarchy created by wealthy and politically powerful classes are the most unjust of all -- quite the opposite of the libertarians and conservatives.
Libertarian (Liberal) propaganda appropriates the more popular socialist ideologies while conflating liberty for only the wealthy/powerful versus liberty for all people. One can see appropriation done in the same way in the very name of the National Socialist (Nazi) party of Germany. These tactics that were used by the Nazis are still used by various American conservative and libertarian parties, who mostly align under the umbrella of the Republican Party. Just look at what the Trump cult weirdos are all saying nowadays. It is pure KKK and Nazi ideology resurrected, under a thin veil of euphemisms.
So if you take at face-value what libertarian and conservative politicians in the US say publicly about freedom, small government, civil liberties, etc., then they ought to be very enthusiastically in favor of Linux, but it is all just propaganda. They don't care about freedom, only freedom for the elite clique of their supposed "supermen," the wealthy elites, the freedom to exploit groups of people who they hate most --- take your pick: foreigners, black people, women, gay and trans, Jews, Muslims, the "woke," the "leftist," etc. The libertarians and conservatives hate things that benefit society at large, because what benefits society also benefits these people they hate.
Linux is pretty authentically a community project for the good of society, and it is truly subversive to the authority of the corporations and elites. So the various libertarians and conservatives of the US recognize Linux as a threat. Only that small group of privileged, middle-class libertarians stupid enough to be duped by the wealthy elite propaganda believe that free software is aligned with their ideology.
Woah, woah, woah... there is a Wayland compositor called DWL and a status bard called DTao that can be scripted using Guile Scheme?! Holy shit!
Now I know exactly what I am going to do as soon as my Linux distro swtiches over to Wayland.
And kudos also for using Nyxt and Emacs. The Lisp runs strong in this one.
Linux exists solely because he made it a collaborative endeavour from the start.
That is the important part. If Linux had tried to compete with Microsoft as a closed-source operating system, no one would have used it -- who would use a tiny, buggy (back then), incomplete, closed-source operating system made by a few guys in their spare time against a very popular, feature-complete, close-source operating system with billions of dollars funding its engineering effort?
What makes Linux popular is that it is collectively owned, that is as much a feature of the operating system as any technology or algorithm written into the source code itself. That feature is what set it apart from Windows or Mac OS.
What is good about NixOS (and GuixOS) is that they apply to package management the same principles that Git applies to managing source code. The Nix store is basically an append-only database (you might even call it a "blockchain") of inter-dependent packages.
So from an individual computer user's point of view, it is much safer to install and roll-back software with Nix than with an ordinary package manager that might allow you to accidentally delete package dependencies and break your system. With Nix, you can install packages that actually do break your system, but because of the append-only nature, you can actually roll-back the install automatically right from the Grub boot menu, no need to re-install anything.
Another advantage of NixOS, though this is more from a system operator's point of view, is that you can guarantee reproducible builds. If the package you have installed has the same hash on all of your computers, that is a simple, human-verifiable proof that all of those systems are running the exact same build of the software. You can probably see that this is very useful for people running servers, like compute clusters, or doing things like A-B testing.
I want to like geany. However, its just not customizable and it lacks support for a lot of things.
I would say it is customizable, but I think it is relatively difficult to customize compared to a lot of other editors (e.g. Emacs). I think Geany is a nice, free/libre alternative to VSCode, and about as difficult to customize as VSCode, but does not have quite as many extensions available for it due to the fact that unlike VSCode, Geany is not supported by a multi-billion dollar company with the goal of embracing, extending, and extinguishing all other competing editors.
Geany Extensions are written in C which is not a scripting language and so unlike in Emacs you can't just write a quick 2 or 3 line script like you would in Emacs to solve some unique text-editing problem.
Geany does have extensions for Python and Lua scripting, but there is almost no ecosystem of Lua or Python scripts, and trying to access the editor features from Lua or Python requires deep knowledge of the Geany Gtk3 API. Compare this to something like the "Lite" text editor which has the whole user interface written in Lua, and therefore you can write fairly elaborate text editing scripts and user interfaces entirely in Lua. You just cannot do this with Geany.
All it misses is a good text editor, but you can run Vim in it.
So, then it isn't missing a good text editor. Install Doom Emacs or Spacemacs instead of the usual Emacs, and you have all you need.
As many here have said, but I will emphasize: learn the Bash programming language. Linux Survival is a very good start, and you can just start experimenting right away in your own terminal on your own computer.
To go more in depth, you can read through the manual on your computer by typing "info bash
". The Info documentation browser is a command line app. You may need to install it using your package manager ("apt-get" or "pacman" or "dnf").
In the "info" app, you can navigate with the arrow keys, pressing enter on hyperlinks, typing l
(lowercase "L") works like the "back" button in a web browser, typing r
(lowercase "R") works like the "forward" button. Info also lets you search the index by pressing i
(lowercase "I") then entering your search in the prompt, or search the full text by pressing s
and entering your search in the prompt. And q
quits back to the command line prompt. "Ctrl-Z" pauses the "Info" app and drops you back into the command line, and you can resume your "info" session using the "%
" (percent sign) command.
Another thing that can help is to learn about the GNU "Coreutils", this is a suite of commands usually installed into /usr/bin
or /bin
which provides helpful command line utilities. These are commands like cat
, wc
, sort
, cut
, ls
, du
, cp
, ln
, chmod
and many others. Read through the Coreutils Info manual by typing "info coreutils
".
And I will also reiterate recommendations from others: learn how to use Vim and/or Emacs. Vim has the more difficult learning curve but is extremely useful for writing scripts. Emacs is better though because it lets you split-screen with manual pages, and copy-paste commands between Man pages, "Infodoc" documents, the shell, and/or a text file, all using only keyboard commands. I think it makes it much easier to learn since everything is integrated together. Ask the Emacs community how to get started if you are interested.
Yes! Emacs has already taken over most of my desktop environment apps with the exception of the web browser and a few apps like Blender and Gimp. I haven't gone as far as you, getting each Emacs buffer to display in its own frame in is own WM-level window, but that would make for a more immersive experience. Also, your color scheme is similar to the one I use now. I love it.
I can't wait for the day when software written in Lisp takes over my window manager, then my panel, then my session manager, then my whole operating system kernel.
You're not missing out on anything. Mint lets you install various desktop environments, they are all very well-configured and stable by default. You can just install the appropriate desktop environment meta-package using Apt:
apt install 'task-gnome-desktop'
apt install 'kde-plasma-desktop'
apt install 'cinnamon-desktop-environment'
apt install 'task-xfce-desktop'
Then you can "hop" from one GUI experience to another by just logging out and logging in with a different session. You might have to add some additional Ubuntu repositories to your Apt config to get all of these meta-packages though.
Besides the desktop environment, the only other big difference between distros is how you use their package managers, which all do the same thing anyways, just with different CLI commands.
Probably the most important thing to consider in a distro is which versions of the latest stable releases of the big Linux apps are available in their distros. Arch-based distros (Garuda, Manjaro, ArcoLinux, EndeavorOS) are the most bleeding-edge but these operating systems tend to break after a software update if you fail to update often enough. Ubuntu and Fedora are the most bleeding-edge non-rolling release distros that I know of, and in my experience they never break after a software update.
Exactly. No human community exists without infighting. Infighting is not a good thing, but it is a good sign -- a sign of growth.
So usually people do install Linux software from trusted software repositories. Linux practically invented the idea of the app store a full ten years before the first iPhone came out and popularized the term "app."
The problem with the Mullvad VPN is that their app is not in the trusted software repositories of most Linux distributions. So you are required to go through a few extra steps to first trust the Mullvad software repositories, and then install their VPN app the usual way using
apt install
or from the software center.You could just download the ".deb" file and double click on it, but you will have to download and install all software security updates by hand. By going through the extra steps to add Mullvad to your trusted software repository list, you will get software security updates automatically whenever you install all other software updates on your computer.
Most Linux distros don't bother to make it easy for you to add other trusted software repositories because it can be a major security risk if you trust the wrong people. So I suppose it is for the best that the easiest way to install third-party software is to follow the steps you saw on the website.