Lua-based operating system, based on LuPI2, with a focus on PowerPC based Macintosh machines
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Izaya 8570a59cab Merge pull request 'fix component proxies not having all the requisite fields' (#1) from Ocawesome101/LuPPC:master into master 1 year ago
include Some work here and there 6 years ago
resources Smart gpu selection system 7 years ago
scripts add PowerPC target to scripts/ 1 year ago
src fix this because it was broken 1 year ago
.gitattributes Improved performance 7 years ago
.gitignore Improve gitignore a bit 7 years ago
LICENSE Update LICENSE 7 years ago
LICENSE-unifont Add unifont license 7 years ago
Makefile update to current kernel to build with current gcc 1 year ago working link to an OS 1 year ago


Lua-based operating system, based on LuPI2, with a focus on PowerPC based Macintosh machines and an aim to support more OpenComputers-style components and mirror OpenComputers behavior more closely where practical.


  1. Clone this repository
  2. Get musl cross compiler (like arm-linux-musleabihf or powerpc-linux-musl), simplest way is to use musl-cross-make
  3. Get xxd utility (usually packaged with vim)
  4. Build dependencies using scripts/ script for your platform(s)
  5. Execute make build
  6. You will need to put some OS to root directory where you run the binary. For now you can get PsychOS2 from the PsychOS build server

In case of problems poke me/someone at #lupi on Freenode


Design of system APIs is heavily influenced by OpenComputers minecraft mod. Some Lua code parts are actually copied from there (all of the code is under the MIT License). Main advantage of the API is that it's event/component based, which provides great level of abstraction. Custom components can be created and used with very little effort, being event-based simplifies code further, providing one unified queue for events instead of multiple ways of handling them.

local component = require("component")

--Create virtual LED component using built-in GPIO component
local led = {}
led.toggle = function() component.gpio.togglePin(27) end
component.register(nil, "LED", led)

--Blink the LED
while true do


On the low-level side LuPI will run on very stripped-down version of Linux kernel as init, it will be the only binary executable in system. Kernel will only provide hardware drivers and abstract some of the things. Entire userspace is meant to be done using Lua. Security isn't the primary goal but still needs to be considered.

Get involved

There are many ways you can help.

  • Report issues
  • Contribete via pull requests
  • Talk on IRC (#lupi on Freenode)