Uxn is a portable 8-bit virtual computer capable of running the handful of tools we use, on our various low-power and classic hardware. It can be used as a playground to learn basic computation skills.
We've already ported orca, nasu, left and noodle to uxn-compatible ROMs. Each one is written in a special flavor of assembly designed specifically for the Uxn computer. To learn more, see the technical documentation.
uxn is a portable virtual machine, meaning that its programs are designed especially to be working on different consoles and devices. The same Uxn program can be used on a NintendoDS, on a desktop computer, in a browser, on tiny electronics, and modern electronics without having to do any changes to the code.
This guide will focus on getting you started with the Uxn emulator for desktop computers, but if you quickly want to try Uxn, you can load a rom directly in your browser by using the web version of Uxn.
The desktop emulator is built with SDL2, download SDL2 for your operating system.
sudo pacman -Sy sdl2 # Arch sudo apt install libsdl2-dev # Ubuntu
The next step is for you to download the uxn emulator:
git clone https://git.sr.ht/~rabbits/uxn cd uxn ./build.sh
Why create a smol virtual computer?
We want to produce lasting versions of our tools and games, and by using simpler systems(the UxnVM is about 200 lines of C) we can build more resilient software due to their lack of dependencies, and support older hardware when possible. The Uxn emulator is extremely simple, and can be ported to an unsupported system quickly. Try Uxn on NintendoDS, Gameboy Advance, Rasperry Pi Pico or on desktop.
As it stands today, modern software is built with extreme short-sightedness, designed to be run on disposable electronics and near impossible to maintain, so we decided to not participate in this race to the bottom. Our aim is to create a machine that focuses on answering the handful of tasks we need, which is centered around building playful audio/visual experiences.
To borrow the words of Viznut Heikkilä on permacomputing, we're interested in cultural and ecological permanence. "That is, how to give computers a meaningful and sustainable place in a human civilization that has a meaningful and sustainable place in the planetary biosphere".
Back in 2016 when first operating on a sailboat, we experienced frequent failures with both software & hardware, largely due to our small energy storage and lack of reliable connectivity. The solution was to create tools that would be better suited to our needs. The objective was to replace the bloated, closed-source or subscription software that we were using to do creative work, such as Photoshop, Xcode and Ableton. We were somewhat familiar with web technologies, so we decided to build our programs on this new framework called Electron.
While solving some of our issues, Electron was rapidly increasing in size and soon joined the rest of the software that we wanted to do away with. Our focus shifted toward reducing our energy use, and to ensure reliability by removing all dependencies.
To transition toward our new goals, we developed offline web versions as temporary stand-ins while researching ways to build more resilient software. We eventually ported our tools to C, but while we had achieved ideal energy usage, portability was still an issue, so we kept looking. We learnt 6502 assembly, seeing players run our NES game on all these different platforms gave us a new idea.
And so, in 2021 we took our biggest leap yet toward longtermism and designed a small virtual machine with a focus on implementability; meaning that moving forward, our software will live on a virtual machine. In other words, the code will stop having to be ported, but instead to make something available on a new platform would our needs or devices change, the emulator remains the only piece of code to be ported, which is explicitly designed to be easily implemented.
This is where we are now. uxn may solve our cross-platform issues, while being extremely light. It took us a long while to get here, we hope that one day the Uxn versions of our software replace the desktop and web versions [16.05.21].
Go slow, and fix things.
Uxn is currently under development, we use #uxn on irc.esper.net to coordinate development [07-05-21].