Key design principles¶
- UBOS should be able to run on a wide variety of hardware.
- UBOS should be fully functional and usable in headless mode (without attached keyboard, mouse and monitor)
- UBOS should expose a consistent set of core conventions and APIs to application developers that does not depend on the underlying hardware.
- UBOS should not require WiFi, Bluetooth, or other wireless hardware. If available, UBOS should be able to take advantage of it.
- Provide a simple set of high-level administration commands in the shell that is structured around what the user wants to accomplish, not around how to do that.
- The same commands can maintain apps built with a wide variety of technologies (e.g. PHP vs Ruby vs Java vs Python etc., databases etc.)
- Fully support virtual hosting, and multiple apps at the same virtual host. Let users pick hostnames and context paths to the maximum extent possible.
- Make sure developers of different apps do not step of each other’s feet, even if they aren’t aware of each other.
- Users expect port 80 and port 443. Don’t use other ports where users can see them.
- Let users pick domain names and paths; many users feel strongly about that.
- Administration via ssh instead of device agents. It’s easier to bootstrap and maintain.
- The primary user interface is shell commands.
- Use Linux package management (i.e. pacman) wherever possible.
- Can be pre-installed on boot medium (e.g. SD Card)
- Use good defaults which can be overridden if/when needed.
- Make automated testing possible / simple.
Economics of administration¶
- The larger cost is in ongoing maintenance, not in initial installation of apps, so automate maintenance as much as possible.
- No backdoors.
- Free and libre to the maximum extent possible.
- No mandatory dependencies on “somebody else’s website”.