It’s me again. This time I want to say that Arch is amazing. No seriously, beside the jokes of /r/linuxcirclejerk I want to describe and explain the advantages that an Arch-based distro has over other distributions.

As I’m a GNOME lover I kind of represent both the “real world user” and a “developer” here. I hate doing things in Terminal (except my only true love VIM ❤) and I want to automate all the things, so the problems never distract me again from my real work on my computer.

I’m not a hired sysadmin, so I don’t give a f*** about anything related to DevOps. I do not like DevOps, I think it is wasted time. I want to build things, not infrastructure. Having said that, we might continue now :)

The Story of Tales with Ubuntu

I was using Ubuntu eversince it came out with its first release. Before that I was using Debian GNU/Linux since I was 11 years old. No seriously, I was using Debian-based systems for nearly 18 years now.

As many things broke over the years, I went to being an APT shadow and compiling things for others. But mostly for my own reasons, because most of the stuff I require on my machine won’t be compiled by others in the first place. At least that’s what I thought when using Debian all the time.

One day, my machine broke again because the System Upgrade didn’t work. I was skipping my Ubuntu system upgrade since last October (2015.10) of my UbuntuGNOME distribution because I saw my brother doing it; and it broke completely with the 2016.04 release due to systemd and wayland.

A real Ubuntu user is only one that needs to update his system from scratch because every config breaks anyways ;-)

So, big deal was a Bug of the Intel driver that was fixed upstream for around 5 years already. It affected me and my old i915 graphics card, so it was really annoying having a backlight display that always re-activates itself when you’re coding in the dark. That shitty bug made me almost rage and hurt my laptop because it was so annoying and nearly impossible to fix.

Self-fixing Bugs in Ubuntu or Debian

When you have a Debian based distribution and you want to fix things yourself (because you know that a Bug has been fixed for 5 years already) there’s the so-called “development header packages” concept where libraries themselves are shipped as binaries and their development files are shipped seperately to save the average user hard drive space. At least that’s the basic idea, there seems to be no reasonable naming concept for those packages, as some packages are delivered by single packages (like mesa ships all mesa-* packages, too) etc.

The real troublemaker behind a “package-dev” concept is the amount of unnecessary source code that lands on your system. If you want to develop, say, a fix for the graphics driver - chances are high that you have to get the source code of the linux kernel and Xorg as well. And tada, you just wasted at least over 5 Gigabytes of your hard drive with unnecessary downloads of source codes that you never wanted in the first place.

Broken Dependencies

Ever wondered why you need to install the email-client evolution and its evolution-data-server for the usage of GNOME? A Debian maintainer decided that it’s good as a default package, so you are forced to install that unnecessary 300MB just for the sake “if you choose to use evolution as an email client”.

That philosophy is basically what got me into going away. If you want to ship or use a newer GNOME shell yourself (or by using say, the Debian testing version of it for yourself directly) you get into trouble real fast. The dependency chain is unimaginably complex and you need to download a shitload of packages to match the version criteria.

Again, as we use Debian, we cannot simply use the most-up-to-date packages, we have to use specific versions that existed 5 years ago (and therefore limits in how “up to date” we can actually be on the system). I’m just referring to the OpenSSL mess here. Or say, Wayland and systemd. Pretty much all f***ed up in Debian.

Why Antergos and not Arch?

The question I get a lot is why I’m not using Arch Linux directly, because most of my stuff is bleeding edge anyways. The only reason I have is: I’m too lazy to deal with parted and other commands. I want a graphical installer. I have no Android tablet opened in parallel to _install my system_. It’s not that i gain anything in knowledge here, I did that back in my Slackware-days already. And I’m not going to do it again. It’s effing 2016, man. Grow up and deal with it.

As dumb as it sounds and as XFCE users are not reading any further by now, I can explain more awesomeness of upstream Arch without having to deal with people using a shell environment variable (HTTP_PROXY and HTTPS_PROXY) to use a Proxy for each networked application.

The power of Arch Linux.

From my personal developer-and-UI-lover view, I think Arch Linux is still a big deal. Its strength is definitely the build workflow and the package management system.

Also, pretty much everything is as up-to-date as humanly possible. I mean, VIM comes out and less than 10 hours later I got the binary package update. It’s not only VIM, it’s almost anything because of AUR.

Granted, I think the pacman syntax (e.g. pacman -Sy and -Su instead of apt-get update && apt-get upgrade) sucks, but I’ve written apt-pac for exactly that.

The concept behind Arch’s package management is that they have the official packages (that are hosted at packages.archlinux.org) and the AUR — the Arch User Repository — where pretty much anything that you can even imagine is already available in. If anyone compiled anything on the planet, it’s probably in AUR already. Seriously, I often wonder how awesome that is ❤

You can imagine the AUR as a centralized PPA alternative. The only difference is that you have a centralized package “host”, not spread-out different ones from dozens of unsynchronized sources like it’s the case on launchpad. You always get into trouble updating from different PPAs, because they most likely ship different dependencies of libraries — dependent on when and on what system they compiled it.

Fixing my own graphics driver

So, as it happened before already, I’m not new to this issue. My mind-boggling moment came when I first wanted to fix a package myself and apply a patch to it to see whether a bug in mesa affected me or not.

I asked over in /r/archlinux on how to achieve that and where to apply the patches to (and basically let them know I was still an Arch Noob at the time). The friendly people over there were uber awesome, they are a friendly community and they always like to help ❤

So, the real deal behind Arch is ABS — the so-called Arch Build System. You first need to install ABS (by using pacman -S abs) and then you need to execute it one time (sudo abs) to sync its database. That might take a while, depending on your internet connection.

What that does is it downloads all the PKGBUILD and patch files of all packages. That means you now can build packages yourself on your machine, using the ABS build workflow.

If you think that ABS explodes in size: It’s currently 50.5MB for each and every package that is available. Take that, suckers!

Package Dependencies

On an Arch-based system, you basically need only a few dependencies to start building libraries. In my case I only needed the base-devel package to get going.

The idea behind Arch’s packages is that all binary libraries ship with their own development headers — excluding the source code. That, my friends, is a big deal in system size. It saves over 8GB on my machine compared to Ubuntu. More free space for more unsorted stuff in my Downloads folder — awesome! :)

Having said that, it means that when you install the binary library package glibc, it also contains the development headers so that you can include it in your source code right away — without having to download the glibc-dev package, for example.

Building your own Driver with a Patch

If you want to build your own driver, you start with the PKGBUILD template of the official package. The complete build workflow from A-Z for a package looks like this, taking the example of the mesa package that needed to be fixed with an upstream patch:

sudo pacman -S abs base-devel;

sudo abs; mkdir -p ~/abs/extra/mesa;

cp -R /var/abs/extra/mesa ~/abs/extra/mesa/; cd ~/abs/extra/mesa; # Apply patch files now, edit PKGBUILD file makepkg -s;

As you see, no further dependencies were required to compile mesa. The cool thing is that the ABS build workflow does not need further package dependencies regularly installed (and probably uninstalled) on your system, so you can simply delete the folder afterwards to give up free space.

My personal ABS repository contains all the fixes that I apply on my system on a regular basis (and I use the releases section for binary packages). Currently, I decided to create a GNOME shell fork and to make some heavy changes to it. And I required exactly zero libraries to be additionally installed for that :)

The build flow was setup within less than 5 minutes and I was able to release my own GNOME shell fork to the public (read: as a binary package) within less than 3 hours; while 99% of the time was me writing code, not infrastructure build chain.

Arch is blazing fast

No, seriously. I mean it. You never experienced the power of systemd before it. No matter what you think, I think there’s no way of getting faster as with an Arch-based system. It has proper UEFI “ultra fast boot” mode support, systemd is rocking hard.

I even plotted an SVG for you, if you don’t believe me (generated with systemd-analyze plot), unmodified, running Arch on a low-end Intel NUC i5 (worth 100$ as it’s 2 generations old by now) with a 1.8Ghz dual core:

Now you can try to compete with that on Debian. Good luck, I think it’s impossible. The equivalent Debian system took way more than 50 seconds to bootup on identical hardware. 6.32 seconds is the unoptimized OEM Arch/Antergos setup and the default behaviour; auto-login into GNOME, with chromium, TOR, cjdns and all other things already being started — with all the generic kernel mods loaded. Take that, initrc suckers!

TL;DR

I found a GPL violation. No, just kidding — I wanted to say that Arch is amazing. If you are a normal user, check out Antergos. Antergos to Arch is basically the Ubuntu to Debian and even more amazing.