After review of the whole baguetteos page.
parent
7674e071a7
commit
e3a80653b1
|
@ -631,10 +631,10 @@ To overcome drawbacks of having simplistic tools, sys-admins developed all kind
|
|||
LXC is *kinda* reasonable, and may be useful in some cases, but it provides no simple way of configuring our services.
|
||||
- **Qemu + KVM, Xen** *let's add software mimicking hardware's complexity to the mix, telling everyone it's for security and simplicity*<br />
|
||||
These programs make the administration simple for sys-admins: no need to configure thoroughly users, groups, etc.
|
||||
Everyone is root and handle its administration as (s)he wants.
|
||||
They also helps big companies to have a large computing capacity paying for itself since they rent it when not needed.
|
||||
At no point Qemu or Xen are helping you getting your services up and running, and [they are not made for security][cveqemu].
|
||||
Yes, running broken programs within Qemu still is better than not.
|
||||
Everyone is root and handles its administration as (s)he wants.
|
||||
Qemu and alike also help big companies to have a large computing capacity which they can rent when they don't need it.
|
||||
At no point Qemu or Xen help getting your services up and running, and [they are not made for security][cveqemu].
|
||||
Yes, running broken programs may be better within Qemu than on plain non security-oriented OS.
|
||||
But.
|
||||
This is still <u>way less efficient than fixing the application</u>.
|
||||
Running applications as simple users, compiling them with sane default options ([RETGUARD][retguard] for example) and providing a few syscalls (like [pledge][pledge] and [unveil][unveil]) to catch errors and most security holes is simple nowadays, let's use that.<br />
|
||||
|
@ -714,14 +714,13 @@ $ service add wordpress domain=example.com
|
|||
$ service start wordpress
|
||||
```
|
||||
|
||||
<red>TODO</red>
|
||||
And <u>that's it</u>.
|
||||
1. Services have tokens.
|
||||
2. Tokens are used by default.
|
||||
3. BaguetteOS provides **default** services for each token.
|
||||
4. If a service is added and its dependencies aren't satisfied, we add other services.
|
||||
5. (Bonus) If a service isn't installed, we ask nicely if the user wants to install it.<br />
|
||||
This is in discussion.
|
||||
*(This is in discussion.)*
|
||||
|
||||
|
||||
Here are a few functionalities `service` brings.
|
||||
|
@ -1044,14 +1043,14 @@ end
|
|||
That's easy to write [even in plain C](https://git.baguette.netlib.re/Baguette/libipc/src/branch/master/examples/pongd.c).
|
||||
|
||||
|
||||
LibIPC explanation goes beyond the scope of this page… <red>and may even deserve a whole website of its own</red> but the tool is awesome and performances are crazy (we have to tell the world!).
|
||||
LibIPC explanation goes beyond the scope of this page… <red>and may even deserve a whole website on its own</red> but the tool is awesome and performances are crazy (we have to tell the world!).
|
||||
[Just go and check!][libipc]
|
||||
|
||||
<red>Explain remote communications.</red>
|
||||
Remote remote communications are transparent.
|
||||
Remote communications are transparent.
|
||||
- clients and services do not need remote communication
|
||||
- any client can join remote services via any communication protocol
|
||||
- any service is implicitly accessible from anywhere, anyhow
|
||||
- any service is implicitly accessible from anywhere, with any protocol
|
||||
|
||||
[Back to top](#top)
|
||||
|
||||
|
@ -1068,7 +1067,7 @@ Remote remote communications are transparent.
|
|||
|
||||
### [Webhooksd][webhooksd]: verify recipes.
|
||||
Webhooksd provides an automatic verification of the recipes, based on new application or library version.
|
||||
Paired with a build system, new recipes received in the repository create packages for a couple of architectures (x86_64, ARM, others will follow).
|
||||
Paired with a build system, new recipes received in the repository create packages for a couple of architectures (x86\_64, ARM, others will follow).
|
||||
|
||||
[Back to top](#top)
|
||||
|
||||
|
@ -1088,14 +1087,14 @@ So, we need a language for both administration dashboard and online services, he
|
|||
- useful compilation errors
|
||||
- no runtime error
|
||||
- Elm
|
||||
- as Purescript but with way fewer documentation (but reading the code is sometimes enough here)
|
||||
- as Purescript but with way less documentation (but reading the code is sometimes enough here)
|
||||
- less generic code (functions such as `fold` and `map` have hardcoded type), which feels a bit hacky
|
||||
- still very young
|
||||
- WASM
|
||||
- seems to be a very young tech, with no real good language or documentation
|
||||
- Zig has wasm as a Tier 1 support, we should investigate
|
||||
|
||||
- Let's rewrite things... QML was the way all along
|
||||
And we should implement a generic framework, QML was the way all along (but without all the historic tooling and **without C++** it would be awesome!).
|
||||
|
||||
<a name="slotting"></a>
|
||||
# 4. Slotting: providing software the right way
|
||||
|
@ -1107,13 +1106,14 @@ Maintainers' job is to verify that all programs have the right library versions
|
|||
### Current set of problems
|
||||
|
||||
- What happens when two programs need a different version of a library?<br />
|
||||
The installation of both may no be possible.
|
||||
See python from version 2 to 3 as an example: developers knew it will break OSs.
|
||||
So, they provided by themselves new names for their binaries (`python-2.7`), and libraries are *by default* packaged into a directory specific for a python version, such as `/usr/lib/python3.8/`.
|
||||
The installation of both may not be possible without workarounds.
|
||||
See python from version 2 to 3 as an example.
|
||||
To make it work, OSs have given new names for their binaries (`python-2.7` and `python-3.5` for example).
|
||||
Libraries are *by default* packaged into a directory specific for a python version, such as `/usr/lib/python3.5/`.
|
||||
This is mostly done for languages, but what about other packaged applications and libraries?
|
||||
- What happens when two libraries are compatible but you want both on your system (see libressl and openssl)?<br />
|
||||
One of them could be provided in another path, such as `/usr/lib/libressl`.
|
||||
- What happens when you want to provide a **very** long term support for your users?
|
||||
- What happens when you want to provide a **very** long-term support for your users?
|
||||
*see companies running decade-old OSs and databases*
|
||||
|
||||
BaguetteOS has a simple and safe way to let users and maintainers provide packages: `slotting`.
|
||||
|
@ -1122,11 +1122,11 @@ BaguetteOS has a simple and safe way to let users and maintainers provide packag
|
|||
|
||||
Slotting is a way to use prefixes (paths, directories) to separate execution environments: a program **A**, requiring libraries **B and C** can be installed this way:
|
||||
```sh
|
||||
/usr/slot-A/bin/A
|
||||
/usr/slot-A/lib/B
|
||||
/usr/slot-A/lib/C
|
||||
/usr/awesome-slot/bin/A
|
||||
/usr/awesome-slot/lib/B
|
||||
/usr/awesome-slot/lib/C
|
||||
```
|
||||
In this example, the `slot` is named **slot-A**, providing an execution environment for A <u>no matter</u> the OS version of *B* and *C*.
|
||||
In this example, the `slot` is named **awesome-slot**, providing an execution environment for A <u>no matter</u> the OS version of *B* and *C*.
|
||||
|
||||
|
||||
**Without slotting** <side-note>*basically, your life sucks*</side-note><br />
|
||||
|
@ -1142,23 +1142,23 @@ This newly installed program will be in `/usr/bin`, as every other program.
|
|||
|
||||
**With slotting** <side-note>*your're awesome*</side-note><br />
|
||||
With slotting, the program will be in `/usr/`<blue>my-overly-awesome-game</blue>`/bin`.
|
||||
1. What if requires libraries?<br />
|
||||
These libraries will be installed in your base system so any of your non-official slot can use them.
|
||||
2. What if the required libraries aren't available in the official BaguetteOS repository?<br />
|
||||
1. What if the game requires libraries?<br />
|
||||
If these libraries are available in the `BaguetteOS` repository, they will be installed in your base system.
|
||||
2. What if the game requires libraries that aren't available in the official `BaguetteOS` repository?<br />
|
||||
Either the game slot provides them, or they are in another slot.
|
||||
In <u>both cases</u> the base system won't change a bit.
|
||||
In <u>both cases</u> the base system won't change.
|
||||
|
||||
Official OS packages are installed in the slot named `baguette` (`/usr/baguette/`), for non-essential programs.
|
||||
Besides essential programs such as `coreutils` which are in `/bin` and `/sbin`, all official OS packages are installed in the slot named `baguette` (`/usr/baguette/`).
|
||||
Any non-official package is in another slot.
|
||||
|
||||
Wanna support Python 2.7 **for life**?
|
||||
Just maintain a `python-2.7` slot and tell the world!
|
||||
If BaguetteOS do not provide required libraries for the continuous support of your application, just add them in your slot.
|
||||
If BaguetteOS does not provide the libraries required for the continuous support of your application, just add them in your slot.
|
||||
|
||||
**This is nothing new, however not used directly in OSs, and still maybe the best way to handle the problem.**
|
||||
**Slotting is nothing new, however it is usually not used directly in OSs, whereas it may be the best way to handle the problem.**
|
||||
|
||||
|
||||
### Why not use X?
|
||||
### Why not use *X*?
|
||||
|
||||
Others are doing slotting too: snap, flatpak, cpanm, pip, go, stack, cabal... <side-note>*the list seems endless*</side-note><br />
|
||||
They all use slotting... *but*.
|
||||
|
@ -1195,38 +1195,38 @@ You will have bleeding-edge technologies and bugs. You're welcome!
|
|||
**Applications and libraries provided by BaguetteOS.**<br />
|
||||
For all official OS versions of the applications and libraries, `BaguetteOS` will provide them in `/usr/baguette`, the `baguette` slot.
|
||||
In case several versions of a library are provided, they will be slotted.
|
||||
For example, `LLVM` is provided in several versions (`llvm8`, `llvm9`, etc.), only the most recent is in `baguette`.
|
||||
For example, `LLVM` is provided in several versions (8, 9 and 10), only the most recent is in `baguette`.
|
||||
|
||||
```zsh
|
||||
$ ls /usr
|
||||
/usr/baguette
|
||||
/usr/llvm8
|
||||
/usr/llvm9
|
||||
...
|
||||
/usr/llvm-8
|
||||
/usr/llvm-9
|
||||
```
|
||||
|
||||
**Applications and libraries provided by third parties.**<br />
|
||||
`BaguetteOS` allows people providing their applications and libraries easily by creating repositories, but you have to slot them.
|
||||
For example, if you want to provide a specific `nodejs` version, please use the following convention:
|
||||
`BaguetteOS` allows third parties to provide their applications and libraries easily by creating repositories, but they have to be slotted.
|
||||
For example, to provide a specific `nodejs` version, the following convention must be used:
|
||||
```zsh
|
||||
/usr/$application-$version/
|
||||
```
|
||||
|
||||
### How use and change slots used
|
||||
### How to use slots and install new repositories
|
||||
|
||||
**Use a slot.**<br />
|
||||
`BaguetteOS` comes with a `/etc/profile` script, adding the functions `prefix_add` and `prefix_del` to your shell.
|
||||
So, if you want to use an application in the slot `my-awesome-app`:
|
||||
|
||||
For example, if you want to use an application in the slot `my-awesome-app`, type:
|
||||
|
||||
```sh
|
||||
$ prefix_add my-awesome-app
|
||||
```
|
||||
|
||||
Your `$PATH` is then changed, allowing you to run applications in `/usr/my-awesome-app`:
|
||||
This will change your `$PATH`, allowing you to run applications in `/usr/my-awesome-app`:
|
||||
|
||||
```sh
|
||||
$ echo $PATH
|
||||
/bin:/usr/bin:/usr/local/bin:/usr/my-awesome-app/bin
|
||||
/bin:/usr/baguette/bin:/usr/local/bin:/usr/my-awesome-app/bin
|
||||
```
|
||||
|
||||
**Install a new repository.**<br />
|
||||
|
@ -1241,7 +1241,7 @@ https://repos.baguette.netlib.re/$arch/
|
|||
https://repos.my-awesome-app.com/$arch/
|
||||
```
|
||||
|
||||
Then you can update your list of packages and install your application:
|
||||
You can then update your list of packages and install your application:
|
||||
|
||||
```zsh
|
||||
# package update
|
||||
|
@ -1253,7 +1253,7 @@ That's all folks!
|
|||
<a name="roadmap"></a>
|
||||
# 5. Roadmap
|
||||
|
||||
We currently aim at providing a rootfs with our tools, when we will have enough spare time to contribute.
|
||||
We currently aim at providing a rootfs with our tools, when we will have enough spare time.
|
||||
|
||||
**Web interface is for later**: we need more time to design its graphical components.
|
||||
On the other hand, back-end should be straightforward.
|
||||
|
|
Loading…
Reference in New Issue