diff --git a/OS/README.md b/OS/README.md index 97e7933..bbeb1c6 100644 --- a/OS/README.md +++ b/OS/README.md @@ -1,11 +1,48 @@ -# 01OS +# What is this? -This folder contains everything we would change about Ubuntu. A folder here represents a folder added to `root`. +This is the operating system that powers the 01. -# Plan +# No, I mean what's this folder? -1. We modify the bootloader to show a circle. -2. We modify linux so that the primary display is a virtual display, and the display the user sees is the secondary display. -3. We make a fullscreen app auto-start on the secondary display, kiosk mode chromium, in /01/app/index.html. -4. We also make it so that 01/core/main.py is run on start-up. This is the interpreter. -5. We put monoliths around the system, which put information into /01/core/queue. +It's the `diff` between 01OS and Ubuntu. + +01OS should be a customized version of Linux. Ubuntu is popular, stable, runs on lots of different hardware. **(open question: Should this be Xubuntu, which is lighter? or something else?)** + +We want to _build on_ Ubuntu by customizing the stable branch programatically, not by forking it — which would mean we'd have to maintain the underlying OS, merge in security patches, etc. Yuck. + +This folder contains everything we want to change from the base Ubuntu. A folder here represents a folder added/modified at the `root`. You can think of it like the `diff` between 01OS and Ubuntu. + +I imagine we'll use something like Cubic to then press this + Ubuntu into an ISO image. + +# Structure + +### `start.sh` + +The start script's job is to start the `core` and the `app` (in full-screen mode). + +### `/core` + +The `core`'s job is to: + +1. Set up the language model +2. Set up the interpreter +3. Serve the interpreter at "/" + +### `/app` + +The `app`'s job is to be the interface between the user and the interpreter. This could be text only, audio, video, who knows. + +For the first version, I think we should just handle audio in/out. So the `app`'s job here is to: + +1. Be a fullscreen app for the user to use 01 +2. Turn the user's speech into text and send it to "/" +3. Turn the interpreter's text into speech and play it for the user + +### Changes to Linux + +We need to make the following changes: + +1. Modify the bootloader to just show white circle on black +2. Auto start the start script, `start.sh` +3. Put detectors everywhere, which will put [LMC Messages](https://docs.openinterpreter.com/protocols/lmc-messages) from the computer into `/01/core/queue` +4. (open question: should we do this? do we want the first 01 to be ready for GUI control?) Make the display that's shown to the user (and filled with the `app`) the _secondary_ display. The primary display will be a normal Ubuntu desktop, invisible to the user. Why? So the interpreter can control the primary display "under the hood".