Title: 0x00 Reference Design
Date: 2022-06-17
Category: 0x00
Tags: permaculture, systems, wiki
Summary: Mapping out the computer of the future
Author: Chinchilla Washington
Status: Published
 
# Design Goals

A coherent computer system that incorporates all of the typical components of your digital life. Unafraid to experiment with new technology, but not interested in reinventing the wheel. Many old protocols may be resurrected as faster computers/internet, larger disks, and new networking technologies (yggdrasil/i2p/tor) make them worth revisiting.

The current direction of computer and software architecture is unsustainable. Even among developers a well reasoned system-wide understanding of how computers work is becoming increasingly rare, as they learn platforms instead of protocols and depend on ever more layers of abstraction. Jonathan Blow argues that this may lead to the collapse of [civilization](https://invidious.kernelpanic.cafe/watch?v=ZSRHeXYDLko) Despite it's wide market penetration, it has failed [it's users](https://www.rfc-editor.org/rfc/rfc8890.html) in almost every way. Computers today are becoming internet appliances that the user has almost no control over. The web browser has become a defacto monopoly operating system, with the (near monopoly) implentation provided by google.

We aim to be a launchpad for experimentation and exploration into sustainable computing.  

## Privacy

Privacy is in shambles: spyware has become ubiquitous, and APTs (advanced persistent threat (actors)) such as google, facebook, and the many other threat actors in the adtech industry, have managed to embed spyware in hidden tracking pixels on almost every webpage you visit and program you download. It has become so ubiquitous that the term 'spyware' itself is no longer even part of the public lexicon: it has become synonymous with 'software'. FOSS/libre software is the exception, and even it is not free of some forms of 'telemetry'.

We will do what we can to improve privacy for legacy protocols, but that's a losing battle long term. Instead of despair, a new paradigm for privacy-centric computing will be explored using local-first and decentralized paradigms. 

## Security

The security situation of modern computer systems is fairly poor, with APTs able to run arbitrary code on most computer systems. This code is usually somewhat sandboxed by a browser or (android/apple) APIs, but that's mostly lipstick on a pig. The attack surface of both is so large that escapes and exploits are commonplace. Beyond the software running on personal computers/phones, most `CURRENT_YEAR` homes have some sort IoT internet appliance that is running embarassingly old and unpatched software, and provides a convenient backdoor into a home network.

APTs have managed to embed backdoors in almost every android device. For example, google requires developers to turn over [private keys](https://www.theregister.com/2021/07/01/android_app_bundle/), allowing them to impersonate the software author and silently provide different software to different users, without the author's or users' knowledge. In fact, providing different software to different users is an explicitly stated goal of requiring developers to turn over [private keys](https://android-developers.googleblog.com/2021/06/the-future-of-android-app-bundles-is.html):

> Google Play uses the app bundle to generate and optimize APKs for distribution for different device configurations and languages.

A cohesive design that makes extensive use of open standards and open source software will minimize execution of unknown code on your computer systems. There is more to security than that, but any system that allows arbitrary code execution by default is defective by design and to be avoided.

## Usability

Existing centralized platforms make near constant changes, almost always to the detriment of users. Changing the names and locations of features. With the centralized platforms almost pathological manipulation of users, serving differnet things to different users in some weird attempt to A/B test 

## Waste (unlimited abstractions)

> For most normies, the operating system is only a bootloader for google chrome.

Hijacking and recreating 'scrolling' on a webpage through a custom extension to a javascript framework that uses jquery, to javascript, to a javascript interpreter, running in a sandbox inside of your web browser, running on whatever bootloader you use to load chrome. 50MB later, your octo-core 64GB RAM gigabit internet monster still manages to load pages slower than a pentium on AOL.

Any new system must treat the existing failures in security, privacy, and usability as first class citizens.

# Software

## Operating System

**Nixos**
Alternates: Guix, spectrum-os, redox-os

Maintaining such a large suite of software and specialized/interconnected configurations is not feasible with legacy operating systems, as evidenced by the large number of 'self-hosted' type operating systems that struggle to evolve beyond installation scripts and rarely provide deep integration between components.

Software must be able to bring it's own dependencies, and expecting the entirety of software to share one version of a library/package is not an approach that can scale. Appimages/dockers/flatpacks are heavyweight and <flamebait>closed source</flamebait> solutions that waste system resources running redundant processes, are difficult to audit (if you can't build it yourself...), and usually don't play nice with traditional operating system tools and configuration.

# Hardware
