website/content/baguette/overview/index.md

13 KiB

+++ title = "BaguetteOS: quick overview"

paginate_by = 5 +++

BaguetteOS status: Work In Progress.

A beta will be available circa mid-2020 for advanced users. End of the year for simple users.

Warning: this documentation is currently mostly oriented towards advanced unix users. We provide insights on system administration, expose our ideas and point of view. Documentation for simple users will be split in another page, soon.

Objectives, for simple users

BaguetteOS aims at providing a simple unix-like system, with an unified web interface.

No command-line required for simple users. let users be just users
Simplicity should not only come from an interface, but be inherent to the whole system. If the OS is simple, there is no need to hack it.

Unified interface is better than features.
Our web interface will directly provide the basic features such as mail, instant messaging, etc. The list of features covered by our interface will grow continuously. We do not want a patchwork of very different software, each of them having its own particularities.

Online services. day-to-day use
The web interface should cover online services, providing an unified experience for main usages: mails, calendar, instant messaging, personal website, file sharing, etc.

One-click management. service installs, updates, etc.
The web interface should handle basic system and network configurations, such as adding users, dhcp, DNS, backups, etc.

Well-known, reliable software. for real
BaguetteOS relies on software known for robustness (opensmtpd, ssh, etc.). Final users may not be familiar to these software, and they won't have to since BaguetteOS will provide a user interface. At no point the user should be forced to reinstall, a misconfiguration has to be easily fixable. We use static compilation for (at least) system tools: there is almost no chance for an update to break the system (yes, almost, people are creative these days).

Hardware support. new or old, fast or slow, it doesn't matter
We provide support for RPi and other small cards: if our kernel runs on it, it has to work. Minimal hardware requirement should be around 100 MB RAM, 50 MB disk.

Documentation. simple, reliable, useful, all-in-one-place
Similar to the OpenBSD FAQ: updated, complete, concise and well-written.

Constrained devices use case. wanna see what small systems can do?
By default, we try to provide the smallest memory footprint: we do not provide manuals nor runtime libraries when not required. Our programs will never require you to download development libraries, nor alternative package managers. We choose all of our tools with size in mind. As a result, our system can be installed quickly even on slow machines.

Objectives, for advanced users

A knowable OS. simplicity at (almost) all cost
Any interested user should be able to understand the role of every part of the base system: no compromise. This means having a very small and consistent set of tools, easy to learn, easy to remember.

Basic system and network management. with the simplest tools ever
We provide a web interface that should handle basic system and network configurations, such as adding users, firewall management, dhcp, DNS, backups, etc. CLI tools are available to manage services, they are designed to be simple, consistent and reliable.

Officially supported services. so you are sure to get them working
We use some services for our own personal usage, so we will provide support for them. For instance: gitea, postgresql, etc.

One need, one tool. this time for real
Installing an application or a library is done by package. Other methods are not supported and the base system will never require them. We avoid to rely on pip, cpanm, or other third party package manager and dependency tree.

Starting, stopping, or configuring a service is done by service. This program alone is used to manage services on the OS. Users should not be required to manually configure each software; instead, most of the configuration should be done upstream using templates. Users should be able to change the default configuration through command-line options. Manual configuration is the last option.

Slotting. any software can be installed on any machine at any time, no extra tooling
Slotting by default helps to install many programs, even with peculiar library version requirements. The same program can be installed in several versions without conflicts.

See more in the technical section.

Objectives, for contributors

Simple to contribute to. you can focus on providing recipes for packages, we handle the tooling
Packaging applications and libraries should be possible with the fewest and simplest tooling possible. BaguetteOS provides a simple tool to package applications (packaging) which allows simple recipes for your packages. packaging handles slotting, compiling, stripping binaries and libraries, splitting the result into different packages (-man, -lib, -doc, etc.), authenticating, etc. All that, just by typing

$ packaging app

nothing more.

meanie meanie dev

No Makefile? no problem
Your application or your library lacks a build system? Here is a tool to create makefiles. It works on any language. yes, even that one

Stable and development versions: same thing. slotting, again and again
One of the coolest aspect of slotting is: you don't need to change your system at all to be on the development version of the OS. The newest version is just slotted in /usr/baguette-dev and that's it. Switching OS version is just a few environment variables away.

New OS, open to explore we are open to new ideas
BaguetteOS does not suffer from cumbersome historical decisions: no overly engineered package format, no stupidly complex patchwork of mismatch tools.

Easy-to-write documentation. and hopefully less procrastination
Online documentation and man pages are written in Markdown (thanks to zola and scdoc). Every tool has a man page: no man page = no integration in base.

Inspiration

  • CRUX, alpine: simple-to-understand Linux systems
  • OpenBSD: security-oriented system, therefore simple
  • PFsense: advanced networking administration through a simple website
  • Plan9 and Inferno: OS with an everything is a file philosophy no, seriously guys
  • suckless and cat-v: documentation and tools, all about simplicity, code readability and re-usability
  • morpheus: OS based on statically compiled tools

Why not use another system?

An operating system is mostly a kernel handling the hardware and a bunch of small programs (named coreutils) doing basic tasks (copy a file, list the content of a directory, print the date, etc.). Additionaly, an OS also has a package manager (such as apt on Debian-like systems).

A few reasons why none of the candidates cover it all. some are mentionned bellow

  1. we want slotting
    So we could change the way we install and maintain packages.
  2. we want fast install and startup on really simple devices see Raspberry Pi and such
    Coreutils shrank to bare minimum, thanks to toybox. We won't require a full-feature system with several hundred megabytes of disk-space used.
  3. documentation is important, but not for all installations
    Your 42nd test install on a virtual machine doesn't need a manual for CLI tools you won't use since you do everything through the web interface. Software and its documentation will be split: manual pages won't be provided by default.
  4. we want automatic tests, and to enable people to test our system
    We want easy chroot installs, on any system.
  5. we want to run on tiny ARM boxes, old laptops, top-notch servers
    So we need to run on any available kernel.
  6. we want to control software distribution releases
    We don't accept to follow updates from an upstream OS that could break our system at any time.

(Note: this section could be expanded in the future.)


Now, let's take a look at each candidate.

OpenBSD. we will get there quick, but will focus on Linux a bit before
We definitively want to use OpenBSD, currently we just focus on Linux for hardware compatibility reasons (and out of habits) but it's not set in stone. We love OpenBSD big time, some of us use it daily. We aim at providing rootfs for running our system under an OpenBSD kernel and environment.
(also, snapshots could be great, guys)

PFsense. network focused
Great system, does the job very well, but won't fit our objectives as it is way too focused on networking.

CRUX and Alpine. great source of inspiration
We do use the CRUX's rc script, and as Alpine it is a source of inspiration for package recipes. However, since we have to change all packages to get slotting, the service manager to have tokenized services, the packaging software to get declarative recipes (...), why even bother use those systems?

GUIX (and Nix). not simple enough
GUIX approach of package management is interesting, having to learn a language to make recipes isn't. And that sums up this technology pretty well. It's great, but not to put everywhere. Every part of BaguetteOS is simple to understand, GUIX is not simple enough. But keep it up guys, it's still awesome.

Plan9, Inferno, morpheus, etc. kinda abandoned systems
That's it.

Wanna see more?

See the technical choices