# LeJOS

leJOS ist ein Java-Betriebssystem für die programmierbaren Lego-Steine Lego Mindstorms RCX (leJOS RCX), NXT (leJOS NXJ) und EV3 (leJOS EV3). Diese Software erlaubt es, die Steuerung von Lego-Konstruktionen in Java zu programmieren. Dazu wurde ein Teil der Java Virtual Machine auf den RCX/NXT portiert.
leJOS wird als freie Software unter den Bedingungen der Mozilla Public License 1.0 (MPL) verbreitet.

## Geschichte

leJOS wurde ursprünglich unter dem Namen TinyVM von José Solórzano im Jahr 1999 entwickelt. Es begann als Hobby-Open-Source-Projekt und wurde erst später zu leJOS wie es heute bekannt ist. Viele Mitwirkende traten dem Projekt bei und entwickelten wichtige Erweiterungen. Unter den Mitwirkenden befanden sich auch Brian Bagnall, Jürgen Stuber und Paul Andrews, welche später das Projekt übernahmen, nachdem Solórzano sich davon zurückgezogen hatte.

## Anwendung

leJOS wird oft zu Schulungszwecken, oder in der Informatiker-Ausbildung eingesetzt, um die Grundlagen der Programmierung in Java zu lehren. Unter Verwendung von leJOS wurde 2001 im Rahmen eines Wettbewerbs der autonome Roboter Jitter entwickelt, der daraufhin zur Weltraumstation ISS transportiert wurde. Unter den Bedingungen der Schwerelosigkeit ist Jitter in der Lage, sich eigenständig und zielgerichtet zu bewegen und herumvagabundierende Teile einzusammeln.
Seit 2006 wird von leJOS auch Lego Mindstorms NXT unterstützt. Neben vielen neuen Merkmalen wird nun auch Bluetooth unterstützt.
Seit Herbst 2013 befindet sich eine Portierung auf die im Sommer 2013 erschienene Hardware-Generation Lego Mindstorms EV3 in Arbeit. Obwohl noch im Beta-Stadium werden neben der neuen Hardware (Motoren, Sensoren) auch Bluetooth und WiFi unterstützt.
Seit November 2014 wird leJOS in einer leicht adaptierten Variante auch im Open-Source-Projekt Open Roberta eingesetzt.

## Programmierung

Die Programmierung mit leJOS basiert auf Java. Dafür wird der verwendete RCX- bzw. NXT- bzw. EV3-Baustein mit einer angepassten JVM (Java Virtual Machine) geflasht. Danach können Programme mit Hilfe der mitgelieferten Tools auf den LEGO-Baustein geladen werden.

### Beispiel (Hello World)

Der folgende Beispielscode demonstriert die Programmierung anhand eines Hallo-Welt-Programms:

## Mehrwert gegenüber der Lego-Software

* ausgefeilte Parallelverarbeitung durch Multithreading inklusive aller Java-Bordmittel (synchronize, das Paket java.util.concurrent)
* einfache Möglichkeit, den Source-Code mit Versionskontroll-Systemen zu versionieren
* Robotik-API: behavior-based robotic, Steuerungsmodelle für Lenk- und Kettenantriebs-Roboter, abstrakte Navigations-Klassen
Während sich die Original-Software von Lego an den Bedürfnissen von technisch interessierten Kindern und Jugendlichen orientiert, richtet sich leJOS eher an erwachsene Hobbyisten.

## leJOS EV3

Mit der Generation EV3 wurde der Lego-Baustein deutlich erweitert und basiert nun auf einem Linux-System. Oracle selbst bietet eine auf Arm portierte Version der aktuellen Java-Runtime an, so dass keine spürbaren Einschränkungen gegenüber anderen Systemen die Entwicklung von eigenen Programmen beeinträchtigen. Mit dem SD-Slot des EV3 ist es auch nicht mehr nötig, die originale Firmware zu flashen – leJOS EV3 wird von einer bootbaren SD-Karte gestartet, ohne die auf dem Lego-Baustein gespeicherten Daten zu verändern. Ebenso werden WiFi-Dongles für den USB-Port unterstützt, so dass ohne Kabelverbindung eine Kommunikation (debuggen, Programme übertragen, selbst ein Login via SSH direkt auf den Lego-Baustein ist jederzeit machbar) möglich ist.