SolusOS 2 & Multiarch
I'd like to quickly make people aware of some recent progress we've made. We've slowly been preparing our toolchain to support 'multiarch'
What's multiarch?
Firstly, it's not multilib. Many 64-bit Linux distributions employ the use of multib to provide 32-bit packages where needed, i.e. for 3D games, Wine, Flash, etc. However, these packages are especially created, and compiled with -m32 from a 64-bit host, to emulate a 32-bit binary. These also need special work to fit in with the package manager, invariably resulting in "ia32-libs" or "-emul32" packages. In Debian, the single largest package in the repository was ia32-libs, which provided all the 32-bit libraries that could ever be needed in one huge unmanageable package. Something had to be done, and they pulled it off well.
In Debian (And Ubuntu) multiarch is employed. Simpy put, it allows you to install packages from a foreign architechture on your system. To tackle the issue of conflicting files, libraries are placed in new subdirectories, using specific host-tuples. For example, 32-bit libraries end up in /usr/lib/i386-linux-gnu, and 64-bit go into /usr/lib/x86_64-gnu. Cosmetics aside, special entries are made to allow multiarch dependency resolution, allowing you to say, install Pango 32-bit on 64-bit, and pull in all the required 32-bit dependencies.
Why's it good for SolusOS?
Using multiarch we can provide the option to 64-bit users to install native 32-bit (no emulation) packages on a 64-bit installation, allowing the use of notoriously 32-bit only packages like Wine, Google Earth, etc. Many 3D games (Steam included) require 32-bit libraries, which is hard to accomplish with an emulated 32-bit packaging system. We've now decided to implement our own multiarch system within SolusOS (even at this early stage) which is compatible with Debian & Ubuntu's standards. We will use the same 'tuples' for multiarch libraries, and we'll also implement the same concept of 'foreign,none,all,etc' multiarch packages. Not only will this increase SolusOS 2's compatibility, it will also make the transition easier for packagers joining the SolusOS project, and increase compatibility with newer software designed with multiarch in mind
How is this being implemented?
Boring details aside, the packages we want to be multiarch-capable, will all follow the multiarch tuple scheme. Special API helpers are being added to PiSi, and a new Multiarch field will be introduced into the SolusOS pspec standard. A wider set of directories are supported by the toolchain to allow arch-specific include directories and pkg-config directories, for example:
/usr/lib/i386-linux-gnu/mypackage.so.1.0
/usr/include/i386-linux-gnu/mypackage.h
/usr/lib/i386-linux-gnu/pkgconfig/mypackage.pc
Using this scheme, it will also become possible to cross-build packages on SolusOS 2 with far more ease than a non multiarch distribution.