Functional Requirements
In this document, you can find a list of functions and constraints regarding
RadishOS and RadishFactory.
Usually, I write this information in a sheets document with at least four colums:
“Function”, “Subfunction”, “Criterion”, and “Level”.
This method ensures that all functions are linked to a measurable value one can
rely upon to guide them in their choice of solutions, as well as to help write
tests and validate the product later on.
Below, all 4th-level headings correspond to the “Function” column.
Files available for download
RadishOS
Note on security requirements
I want to mention some hardening features on this page, but the prototypes I build first will not have much hardening by default. In a sense, this is not a problem, since I can still use principles from secure by design with later variants of the distribution, namely using Gentoo’s hardened profiles, with kernel hardening, SELinux, etc.
Interactors
The following diagram shows what elements are involed in interactions with the Linux distribution; listing them helps think about functions and constraints.
mindmap
((RadishOS))
(User)
(Hardware)
(Software)
(USB Peripherals)
(Displays/Graphics)
(Threats)
(RadishFactory)
(Network/Internet)
(Private Data)
Functions
Perform usual tasks
| Subfunction | Criterion | Level |
|---|---|---|
| Browse the Internet | Browser feature test* | 540+/588 |
| Write code | Languages | Bash, C, C++, Rust, Python |
| Manage code repositories | VCS | Git |
| Write configs | Languages | YAML, TOML, KDL, Lua |
| Edit documents | Formats | ODF, MS Office, PDF, Photos |
| Deploy containers | Backend | Podman |
| Play games | Stores | Steam, Epic Games |
* browser test from https://html5test.co
Install the OS offline
| Subfunction | Criterion | Level |
|---|---|---|
| Find existing partitions | Type of partition | Linux Home |
| Partition disks | Tool used | cryptsetup, lvm, (s)fdisk |
| Format partitions | Filesystem types | ext4, btrfs, xfs, lvm, luks2 |
| Mount filesystems | Filesystem types | ext4, btrfs, xfs, lvm, luks2 |
| Bootstrap | Type of filesystem | Prebuilt filesystem (stage4) |
| Create users/passwords | N/A | N/A |
| Open chroot shell | N/A | N/A |
Install and update packages
| Subfunction | Criterion | Level |
|---|---|---|
| Install binary packages | Format | GPKG, Flatpak |
| Source | RadishFactory binary host, Flathub | |
| Compile pkgs (emergency) | Source | RadishFactory ebuild repository |
Protect private data
Constraints
RadishFactory
Interactors
mindmap
((RadishFactory))
(RadishOS)
(Network/Internet)
(Gentoo/Guru ebuilds)
(Binary packages)
(Admin User)
(Threats)
(LDAP)
(Installation Media)
Functions
Provide binary packages for a Gentoo-based system
| Subfunction | Criterion | Value |
|---|---|---|
| Download new ebuilds | frequency | 1 time/week |
| Compile ebuilds into binaries | frequency | 1 time/week |
| Run tasks autonomously | human actions | at most 1 |
| Archive multiple versions | nr. of versions | 3 |
| Be compatible with Portage | Binary format | GPKG |
| Be compatible with multiple PCs |
Provide ISO images of a plug-and-play operating system
| Subfunction | Criterion | Value |
|---|---|---|
| Assemble binaries into an OS | frequency | 1 time/month |
| Run tasks autonomously | human actions | at most 1 |
| Store and version OS description |
Expose a public mirror on the internet
| Subfunction | Criterion | Value |
|---|---|---|
| Be available at anytime | target uptime | 28/30 days |
| Serve users simultaneously | nr. of users | < 10 |
Be secure by design
| Requirement |
|---|
| Use network segmentation |
| Use modern protocols (TLS) |
| Filter network traffic |
| Authenticate admins and devs |
| Hide critical services |
| Minimize public exposure |
| Anticipate data losses |
Minimize energy consumption
| Subfunction |
|---|
| Turn off inactive components |
| Throttle CPUs automatically if needed |