Vanilla Linux post-mortem

Vanilla Linux is no longer in development.

Who am I?

My name is David Demelier. I’m a C, C++ programmer and opensource activist. I started using Linux in 2003 with Mandrake 10.0 as first install. I enjoyed immediately and never went back since.

In 17 years of use, I’m one of the people most known as “distro hopper”. As I am extremely demanding, I’ve always tried new distributions each time I faced an issue / goal that I dislike in a distribution. For example, Fedora is probably one of the most loved distribution I’ve used but it’s also one of the most bloated and complicated. Its infrastructure is a huge mess that nobody is able to memorize by heart, also contributing is a big pain. During this period I’ve tried more than ten distributions.

As I gained experience and started to love alternatives to “standard” distributions, I’ve felt that it was the time to create an innovative distribution that is not based on all major components.

Vanilla Linux

So it all started as freeing everything I dislike and everything I would like to see in a distribution:

And furthermore, based on alternatives such as:

And the core packages were quite easy to build. I’ve installed an Alpine Linux host and started to write some packages with my own package manager from scratch. Honestly, most core and basic packages were quick and easy to build. Only a few (RedHat ware mostly) needed a lot of patches. To quote only one: elfutils.

After that, I was pretty happy with the result and decided to start some community (mailing lists, IRC, announcements, etc.).

Package manager in shell

Since the beginning, I’ve wanted to write a package manager in pure POSIX shell. By this way the minimal system only require busybox and musl to run, no other dependencies.

In only less that 2000 lines of code, the Vanilla Linux package manager was already able to install, remove, update and upgrade packages with dependencies. Even the manual pages were already written.

However, something I’ve not taken into account before starting. Shell is slow. Installing packages is quite fast but computing dependencies took an insane amount of time. If you requested to install the whole set of packages (~900 at that time) it would took more than two minutes to complete the dependencies calculation. This is completely unacceptable for a daily use.

I won’t say that writing a package manager in shell is bad idea, I just think it should not handle dependencies in a smart way. The Slackware package manager is written in pure shell too but does not handle dependencies and therefore is much faster.

LLVM

I love LLVM so I love clang and all other components. There are no distributions out there that are fully built upon a whole toolchain. Vanilla Linux is definitely the first one to have tried that.

Some distributions already use clang as default compiler but they still stick to libstdc++ (from gcc) and binutils’s linker. Vanilla Linux on the other hand used clang, lld, libc++, libc++abi, compiler-rt, openmp and libunwind.

Then, euphoria disappeared. The amount of patches required to build upon this toolchain is copious. Some packages (elfutils) were even not compatible with clang because they use explicit GCC extensions. And it isn’t the only one. Too much upstream developers think Linux == gcc/glibc and the same problems applies to the GNU C extensions.

My motivation definitely vanished when I’ve spent two weeks trying to build firefox for Vanilla Linux. Its complexity, the error messages and the lack of documentation was unbelievable. That’s simple, it’s the very last package I’ve tried to port before giving up.

Contribution

A Linux distribution is something that lots of people are interested in. I’ve started to spread the creation of the project with its goals and many friends and individuals complimented me to continue and will follow the project.

But then, no feedback. So I was mostly the single one contributor to package and ask for testing. People were simply saying that it looks great eventually never asking how it goes again.

With a colossal amount of packages required to port to run a full system, I just realized that I can’t do it alone if nobody would help me. I knew some people who wanted to create their own distribution almost similar to mine but disliked the use of shell for the package manager and eventually created their new one from scratch while Vanilla Linux was already able to boot a system and run wayland, X.Org, Mate and XFce. That’s pretty irritating and demotivating.

Final words

I’ve loved every part of Vanilla Linux I’ve designed and implemented. It was a fun project to work on. It gave me headaches at some point but I really loved to see the quick progression towards a running system with clang.

I’ll probably never try to create my own distribution anymore. It’s just too hard and complicated not mentioning the amount of time it requires. If only earth wasn’t rotating only 24 hours I’d probably continue, but I have others passions and development I’d like to continue.

Notes

This website will probably stay forever but the Redmine project will be completely archived upon 01 March 2020.

I keep the repositories for people who wants to see what the project looked like or if maybe someone would like to start the project again but I doubt it.

Note: they are not visible on the index page.