Lua-based operating system, based on LuPI2, with a focus on PowerPC based Macintosh machines
Go to file
Łukasz Magiera 7731fcbe29 Use musl libc
2016-02-09 22:54:52 +01:00
include Debugging improvements 2016-02-09 17:40:51 +01:00
resources Split resources form core lua 2016-01-19 01:25:52 +01:00
scripts gpu.copy, unicode lib 2016-01-14 01:10:04 +01:00
src Use musl libc 2016-02-09 22:54:52 +01:00
.gitattributes Improved performance 2016-01-18 19:42:32 +01:00
.gitignore Improved Makefile and Gitignore. 2016-01-21 23:25:51 +01:00
LICENSE Update LICENSE 2016-01-18 21:47:56 +01:00
Makefile Use musl libc 2016-02-09 22:54:52 +01:00
README.md Use musl libc 2016-02-09 22:54:52 +01:00

LuPI2

Second attempt at Lua based operating system, primarily aimed at RaspberryPi, but with ambition to support other boards as well. The main motivation is fact that GNU/Linux + python solution isn't allays the best for people that haven't been programming ever, and Lua in one of the simplest, most intuitive languages. It has only 6 types, very simple syntax, yet supports many advanced mechanisms.

Running

  1. Clone this repository
  2. Get musl libc(with musl-gcc wrapper) 2.5 Get xxd utility(usually packaged with vim)
  3. Execute make build
  4. You will need to put some OS to root directory where you run the binary. For now you can get plan9k at http://cloud.magik6k.net/index.php/s/7jPRAU037dzt8Ga/download

Idea

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
  os.sleep(1)
  component.led.toggle()
end

Implementation

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)