“Oh no! Not another linux distribution!”

Well, to be honest, I’m not a HUGE fan of [the present-day state of] the “linux ecosystem” as much as everyone else who is actually “using linux” as his or her’s(do you exist?) primary work OS. Now, with that polite, perfectly-formed sentence out of the way,

[large section of hate-speach full of IT conspiracies and finger-pointing for the truckload of “unfortunate” decisions and sheer incompetence the linux ecosystem has suffered under, removed]

I think it’s time to revisit the micro/*-kernel land and given enough .. time(and a steady supply of coffee) I’ll do just that. But first, I need a usable development OS that won’t take years to put together and does what an OS is supposed to do – be a thin layer between the world around you, a few pieces of rather primitive hw and your senses, maybe augment them, add a few new ones and most importantly stay the f*** out of your way.. or, given what we have to deal with, at least stay out of your way as much as possible ..
So, here is my take:

io/linux draft-of-sorts

General overview

– We use XBPS from Void-linux as the default package management system internally(suggestions welcome), Gentoo‘s portage was a close second but almost any package management system is supported given enough time to develop a suitable runtime.
– Split into “io.host” and “io.guest”(names, as almost everything at this point, subject to change), where io.host can be seen as a thin layer on top of your hw providing resources to users, io.guest the actual user environment(you know, that part you care about)
– “Out of your way” configuration inspired by composer / npm / oci; everything in one configuration file, a standalone file per configuration item or anything in between
– No “We are secure” BS, we are NOT! Nor is anything you can get “on the internet”. We are not in the business of selling security™ fairytails!
– Bootable on “foreign” linux distributions or windows(usb images are shipped with a standalone qemu binary)
– Roles, apps are isolated, immutable, with a temporary state cache by default
– Easily extendible
– Clean
– Pencil and paper, as of 2017 still the ultimate usability power-tool. Realizing this, despite all the “apps” and piles upon piles of “smart” devices just waiting to become a new layer of junk on a landfill somewhere in Nigeria is one step closer to writing better user-facing computer systems.

“The Host”

– Designed to run primarily from RAM
– ZFS as the primary FS for cache/data
– Bcachefs (hey, testers needed)
MuQSS scheduler
– Grsec(testing patchset)
Xen Dom0 kvm + LXC or standalone LXC
– Musl hardened toolchain w libressl

– roles/apps/users isolation kvm / xen, lxc, chroot}
– roles/apps integration {script-wrapper, overlay, none}
– Fully configurable fs layout, the only requirement is to have a io/linux dataset present(not because its hard-coded across thousands of binaries, just looks nice)
– User auth via removable devices(optional +key, +pass, +device)

“The Guest”

– “Dockable”; your(user’s) roles, apps and data are tied to your removable device, your whole desktop environment(s) moves with you
– Optional “cloud” sync for state and config data
– Runnable from windows – in other words – you can take all your apps as-is to office and continue where you left on a windows machine(qemu VM running io.host with your io.guest env “docked”)
– On running “undock”, all apps are freezed to your device(their state saved), on “dock” into another iolinux host, apps that are not available on the host/host’s per-user cache are downloaded in an npm/composer-way (config default)
– Idealy run from a removable SOC device(progress on this topic is exactly 0)

Aaand “The Ugly”

(as in, implemented in such a terrifying way that it deserves special mentioning)

– mdev
– io.CLI

Links / downloads / free stuff

Iso/usb/pxe test images:
http://images.iolinux.org

Kernels/runtimes/roles/apps:
http://repo.iolinux.org

Wiki/Docs(TBD):
http://docs.iolinux.org

Gitlab(TBD)
http://dev.iolinux.org

Buildbot(TBD)
http://build.iolinux.org

CellFS(TBD)
http://cellfs.iolinux.org

Filesystem layout

Default :: ZFS datasets

io	/linux	# tmpfs only / overlaid over existing cache
		# see iolinux.conf for more details

	/runtimes
		# io.host runtimes(conf. name / multiple folders/datasets
		# accepted(fe per rt-group)), default: void(for now)
		# see runtimes.conf for more details

	/roles	# io.host roles (optional, conf. name / multiple
		# folders/datasets accepted(fe per role-group))
		# see roles.conf for more details

	/apps	# io.host apps (optional, conf. name / multiple
		# folders/datasets accepted(fe per app-group)) 
		# see apps.conf for more details

	/users	# dataset name configurable, if other than root users
		# are to-be created, at least one "users" folder/dataset
		# has to exist, multiple are accepted(per user-group fe)
		# Retention policy for permanent / guest users applies
		# see users.conf for more details	

	/pub	# files served by/stored on iolinux, optional, can be
		# your wikipedia / books / docs collection exported 
		# via smb fe; as the name suggest, this is meant to be
		# a public-kind-of-dataset
		# see storage.conf for more details	

ZFS configuration

Something to get you started with when testing iolinux on commodity hw.

Lite

(cache only, perfectly fine if more than one io.host is installed on your NW OR you sync to cellfs/”cloud” OR your data is not that important)

1x SSD
1x HDD
1x SSD L2ARC + 1x HDD

Reasonable

(suitable for most desktop workloads / simple home NAS || media server)

1x SSD L2ARC + 2x HDD zfs mirror

Lots of spindles

(this was my dev-workstation setup before I moved to the less-noisy more power-efficient variant above)

1x SSD L2ARC + 3(4)x HDD raidz1
1x SSD L2ARC + (5)6x HDD raidz2

I want to loose my (probably unbackupable) data

(not tested with n > 2 for which I’d personally use a different OS entirely)

n x (1x SSD L2ARC per each 3(4)x HDD raidz1)
n x (1x SSD L2ARC per each 5(6)x HDD raidz2)