vanilla: Vanilla restarts

Added by David Demelier about 2 months ago

I restart the development of vanilla.

But, it will be done differently. I no longer focus on providing every package on earth but instead will carefully chose only what's necessary. I want to provide high quality packages with proper LLVM integration to reach the target of running a fully loaded LLVM distribution. Thanks to the latest version of some upstream packages it's now possible to boot a complete LLVM vanilla right now (even the Linux kernel and elfutils!).

What changed since last work

LLVM 13.0 is now available

The latest version (at the time of writing) is 13.0.0 and available.

AArch64 support is now available

The project has been ported to this architecture and can now be used on Raspberry Pi!

The project will also provide armv7 support later.

There is now a limited set of package split

Even though I thought it's a bad idea to split package, it's unfortunately necessary for some of them. It's still considered as a feature of last resort and as such used only when necessary.

  • llvm: upstream wants to build LLVM from a monorepo, as such the toolchain is fully built with one package and split into small parts: libcxx, libcxxabi, libunwind and so on.
  • util-linux: this package provides libraries that are used in many places which are necessary. It is split into individual libraries: libblkid, libmount, etc.
  • linux: splits into linux-headers

The package manager is two different applications

I think vpk is too big right now and as such all build features are put into a different application: vpkbuild. I thought it was better to split vpk because the download function did too many things and now having separate processes simplifies the command line interface.

No summary before installing

The vpk install command was insanely slow because it was computing the dependency list and then providing user summary. Instead vpk will now install everything immediately like apk does.

No sysvinit anymore

We use our very minimalist vinit project instead. It's sole purpose is to boot the system and call init scripts. No magic, no dependencies or anything. It will also have first class silent boot support.

A spawner vspawn

The minimalist vspawn is an application similar to start-stop-daemon except that it's much more simpler. It should be used to create init scripts that do not have daemonizing features.

Reserved UIDs and GIDs will start with an underscore

Similar to what OpenBSD does, all UIDs and GIDs that must not be used by the end user will start with an underscore. At a glance, it helps users to indicate that a user or group must not be manually modified or joined. The first package to have been changed to that is OpenSSH which now uses _sshd.

All other packages will be modified soon.


Future directions of the project.

Deprecating X.Org

As I also already said, I think wayland must replace X.Org at some point. It's a very large package set and wayland must be pushed ahead even more. There is no timeline for now as some desktops still require libx11 and their friends. Those who wants another init system can use their own.

Rewriting few vpk and vpkbuild parts in C

Shell is a good language for scripting quick stuff. But it's also limited, slow and painful to debug. When applicable as long as there are no dependencies, some part of vpk internals will be written in C for better performances, especially in dependencies calculation.

irccd: 3.1.0

Added by David Demelier over 1 year ago

I'm glad to announce the 3.1.0 version. It adds a new hooks system to write minimalist plugins using any language. See 3.1.0 for more details.

vanilla: Resignation

Added by David Demelier about 2 years ago

With a very strong sad decision, I'm announcing the immediate stop of Vanilla Linux distribution.

While this project has ambitious goals, it is too hard and different taking too much time to achieve a decent stable version. Large amounts of packages require dozens and dozens of patches because upstream developers usually think Linux = GCC/glibc. Also, the lack of individual interest and absence of contributions also have impacts on the development.

This project was very interesting and still proves that LLVM/clang is a interesting alternative but in my opinion we will be unable to deliver a Linux distribution based on it by default in a decent amount of time.

For those who were interested in the distribution and gave lot of feedback, I'd like to thank them a lot!

Note: the redmine project will be deleted starting from March, 01 (as the first announcement, mostly). Mercurial repositories remain indefinitely but will be hidden in the home listing.

vanilla: LLVM 9.0.0 toolchain available

Added by David Demelier over 2 years ago

The toolchain LLVM 9.0.0 has been successfully upgraded for Vanilla Linux. This makes Vanilla Linux one of the first distributions to provide it.

What's most exciting feature is the ability to build the Linux kernel with clang.

The current repository will be updated once the final passes of LLVM 9.0.0 have been fully rebuilt along with musl and busybox. Stay tuned.

vanilla: 0.2.0

Added by David Demelier over 2 years ago

Vanilla Linux 0.2.0 is now available for download.

About this release

This version adds many new packages with now a total of ~830 packages.

Notable additions:

  • A large amount of KDE frameworks were incorporated.
  • Most of the programs that are PAM compatible have appropriate working configuration files.
  • The complete aspell package list has been added.
  • A large amount of libretro and RetroArch packages has been added.
  • More audio and video codecs.
  • A web browser is now available based on webkit2gtk: midori.
  • Almost all Qt 5 modules are available.

Notable changes:

  • The new FHS, Vanilla Linux no longer follow the LSB recommandation and has a simpler hierarchy. No /usr/bin, /usr/sbin or /sbin, everything is in /bin.
  • LibreSSL replaced OpenSSL.

Improvements to vpk

Here is a list of changes to the Vanilla Linux vpk package manager.

  • Support of dependencies. This is still considered experimental and some packages may have forgotten dependencies yet. This will be fixed properly in 0.3.0. For now, please verify if there are missing dependencies after installation.
  • A new vpk add command that install local packages without dependencies, mostly used for scripting.
  • After installation of packages, vpk will print:
    • package message if specified (install bluez for example).
    • protected files that need update (install etc package, edit one the files it provides, then reinstall etc for an example).
  • The vpk build now build either only the binary or only the source package if one of -s or -b was specified.
  • An experimental command vpk bulk that download the source package and rebuild their dependencies and the package itself in a clean chroot.
  • Several predefined hooks are installed and ran after installation of packages (fontconfig, gtk-update-icon-cache and update-mime-info).
  • Minor performance improvements
  • The option -r was removed from every command. In contrast to the 0.1.0 release, the recommended way to download and use Vanilla Linux is to extract the minirootfs file instead. See below.


Download the minimal image and extract it under a subdirectory.


$ mkdir vanilla-0.2.1
$ cd vanilla-0.2.1
$ wget
# tar xvJpf Vanilla-Linux-0.2.1-amd64-minirootfs.tar.xz
# cp /etc/resolv.conf etc/
# mount --rbind /dev ./dev
# mount --make-rslave ./dev
# mount --rbind /sys ./sys
# mount --make-rslave ./sys
# mount --rbind /proc ./proc
# mount --make-rslave ./proc
# chroot . env -i sh -l
# export TERM=xterm-256color (recommended)
# export PATH=/bin:/local/bin
# vpk search supertux

Upcoming for 0.2.0

A XFCE desktop bootable QEMU image with will be created and uploaded once ready in the, stay tuned.

What's next for 0.3.0

The main priority for 0.3.0 is to consolidate existing packages and make sure they are the cleanest and well configured. The key idea is to finalize the vpk bulk command and start using it for every new package. Also, this command will verify the built package to make sure no dependencies are missing after installing it.

The most important feature planned is the vpk upgrade command. For now, there is no way to upgrade packages because I spend much more time adding new packages than updating existing. But it's time to incorporate this major command since its one of the last important bits to add to it.

irccd: Removing BitBucket official mirror

Added by David Demelier over 2 years ago

After the sad decision that Atlassian did about removing Mercurial support. I announce that the official irccd mirror will be removed today along with my account on it.

Also, I recommend people to never trust companies and hosting services. I'll no longer create official mirrors on proprietary hosting services starting from now.

Don't hesitate to advice opensource hosting services that have Mercurial support if you are aware of some.

vanilla: 0.1.0

Added by David Demelier almost 3 years ago

Vanilla Linux 0.1.0 is now available for download.

About this release

This version includes vpk 0.1.0 which supports:

  • Building packages vpk build,
  • Downloading packages, source packages and distfiles vpk download,
  • Installing packages (no dependencies yet) vpk install,
  • Removing packages vpk remove,
  • Querying package list vpk list,
  • Querying package information vpk info,
  • Updating manifest file vpk update.

The vanilla sources contain around 300 packages with several options.

As bootloaders, grub and efibootmgr are provided, lilo is available too but fails to run on my system.

No Linux kernel is provided yet so you will need to build it yourself for the moment.

Even though planned for 0.2.0, most of the X.Org distribution and wayland packages are already available for download!


To install in a chroot or a directory (/tmp/vanilla in this example):

Warning: make sure you don't forget -r option otherwise you'll override your running system!

First, install vpk on the host. Use 0.1.0 version because the package format has changed.

# wget
# tar xJf vpk-0.1.0.tar.xz
# make -C vpk-0.1.0 install

Install filesystem, etc in this explicit order.

# vpk update -r /tmp/vanilla
# vpk install -r /tmp/vanilla filesystem
# vpk install -r /tmp/vanilla etc

Then, install some core packages.

# vpk install -r /tmp/vanilla bash ncurses readline musl gettext zlib coreutils libcap acl attr
# vpk install -r /tmp/vanilla llvm clang lld libc++ libc++abi libunwind compiler-rt

Then you can chroot, first make sure /dev, /sys and /proc are mounted.

# mkdir -p /tmp/vanilla/{dev,sys,proc}
# mount --rbind /dev /tmp/vanilla/dev
# mount --make-rslave /tmp/vanilla/dev
# mount --rbind /sys /tmp/vanilla/sys
# mount --make-rslave /tmp/vanilla/sys
# mount --rbind /proc /tmp/vanilla/proc
# mount --make-rslave /tmp/vanilla/proc
# chroot /tmp/vanilla env -i bash --login
# export PATH=/usr/bin:/usr/sbin

Now, you're also be able to compile and build a program using clang and clang++. In the latter case, it will link against libc++, libc++abi and libunwind.

Notable packages:

  • vim 8.1
  • gcc 8.3.0
  • llvm 8.0.0 (with lld, clang, compiler-rt, libc++, libc++abi, libunwind)
  • bash 5.0
  • coreutils 8.30
  • cmake 3.13
  • mercurial 4.9
  • wayland 1.16
  • weston 5.0.0
  • mesa 18.3.5
  • gtk 3.24
  • musl 1.1.21
  • ncurses 6.1
  • perl 5.28
  • python 3.7 and 2.7
  • xorg-server 1.20

irccd: 3.0.0 date

Added by David Demelier about 3 years ago

I've posted a news 8 months ago saying that 3.0.0 will come soon.

I apologize this didn't happen. It will, I take more time to improve any last bit to make this release as clean and perfect as possible. The hardest part is the C++ API, since 3.0.0 will include an official C++ API for developing plugins, I will need to take care of this compatibility during the 3.y.z lifetime.

And since I hate to keep bad details, I'm still reading and checking every single function that I could write in a more cleaner way to avoid cluttering the API with deprecated functions/types after 3.0.0 will be released. I also take the consistency very seriously. For example the term "host" and "hostname" were mixed in a very large amount of code. Some options were named "host" and some "hostname". I've fixed all that in 3.0.0 but I want to be sure all other things in C++ API, Javascript API, options, plugins, network API, irccdctl output will be absolutely perfect once 3.0.0 is released.

Unfortunately as the only one contributor and not having many feedbacks, I don't always see all these small typos or errors and need more time to improve irccd.

Anyway, irccd 3.0.0 will happen this year and I really want it to be a long term release with the best user experience.

irccd: Mercurial repository edition

Added by David Demelier about 3 years ago

The Mercurial repository will be publicly edited on Wednesday 07 November evening.

I've discovered that the tag 2.2.0 and its signature commit were created on the wrong branch and this requires manual history edition. This means that you should either download a fresh copy of the repository or to strip and update.

Warning: if you have local changesets, those will be removed.

# you need strip extension
hg strip -r 0
hg pull
hg up @

Also available in: Atom