Wie Etherpad Lite entstand

Diesen Montag (22.8.2011) haben wir das große Release von Etherpad Lite gefeiert. :) Aus diesem Anlass möchte ich euch ein wenig darüber erzählen, wie Etherpad Lite entstand und welche Probleme es löst.
Welche Probleme gab es bei dem alten Etherpad?
  • Der Ressourcenverbrauch: Die Java Virtual Machine, unter der Etherpad lief, verbrauchte im laufenden Betrieb ca 1 GB, manchmal auch 2 GB RAM. Für Firmen mag das vertretbar sein. Für Privatanwender, die meist nur einen kleinen vServer gemietet haben, ist das jedoch eindeutig zu viel. Besonders dramatisch fiel uns das beim Piratenpad immer wieder auf, wenn sich die gefühlte halbe Welt auf einem Pad versammelt hatte. Die CPU-Last war durchgehend auf 100%, der Server reagierte meist nicht mehr und auch mehrere CPU-Kerne brachten keine Abhilfe. Unsere einzige Möglichkeit hier einzugreifen bestand in einem Neustart. Selbst heute noch wird das Piratenpad nächtlich neu gestartet, um die Probleme von Memory Leaks und Endlosschleifen einzudämmen.
  • Etherpad war “Closed Open Source”: der Code war offen, doch niemand verstand ihn. Es war nie geplant, dass die Öffentlichkeit den Code zu Gesicht bekommt. Die Software wurde komplett undokumentiert über Nacht veröffentlicht. Es gab nicht einmal eine interne Dokumentation. Große Teile des Etherpad-Codes wurden bereits vor Veröffentlichung nicht mehr verwendet und waren Überbleibsel von vorangegangen, mittlerweile entfernten Features. Zudem finden sich angefangene, nie voll implementierte Funktionen im Code wieder. Auf Kommentare im Code wurde nahezu komplett verzichtet. Eine Debug-Möglichkeit gab es nicht. Dies machte es Entwicklern schwer bis nahezu unmöglich, in den Code einzusteigen und ihn zu verbessern.
Kurz: Etherpad war ein Monster, bei dem man als Admin froh war, wenn es lief und sich machtlos fühlte, wenn es Probleme gab. Zugleich wurde Etherpad jedoch nach der Veröffentlichung zu einem wichtigen Instrument für Meinungsfreiheit. Demonstrationen wurden darüber organisiert, Beweise von Polizeigewalt zusammengetragen, sogar die neue Verfassung von Tunesien wurde auf einem Etherpad geschrieben. Das versetzt uns in die missliche Lage, dass eine der vielleicht für die Meinungsfreiheit wichtigsten Technologien, von einer Blackbox-Monster-Software, die jeder Admin hasst, bereitgestellt wird.
Wie wurde Etherpad bis heute gezähmt?
Bei der Piratenpartei haben wir im Laufe der Zeit Methoden entwickelt, Etherpad am Laufen zu halten. Die virtuelle Maschine ist großzügig mit viel RAM ausgestattet, ein Nagios überwacht die Erreichbarkeit und schlägt bei Problemen Alarm. Das Piratenpad-Team besteht mittlerweile aus 3 Personen – sodass immer jemand da ist, der bei Problemen eingreifen kann. Mit viel Schmerz und herumprobieren ist es uns sogar gelungen, Etherpad etwas an die Anforderungen der Piraten anzupassen. Trotz allem haben wir immer wieder kurze Ausfälle, die sich aus den oben genannten Problemen ergeben. Das Piratenpad zu administrieren ist allgemein ein recht anstrengender und nervenraubender Job.
Wenn man Leuten von den Problemen mit Etherpad erzählt, kommt immer wieder nach sehr kurzer Zeit die Idee auf, Etherpad neu zu schreiben. Das Problem war bisher,  dass dies bedeuten würde, die kompletten Synchronisierungsalgorithmen neu zu schreiben. Etherpad war die wohl erste Plattform, die eine webbasierte Textbearbeitung durch mehrere Personen in Echtzeit zuließ. Das neu zu schreiben wurde immer als noch schlimmer als Etherpad zu verbessern angesehen. So blieb die Situation lange Zeit.
Wie entstand Etherpad Lite?
Alles begann, als ich den Chaosradio Express Podcast zu Node.js hörte. Felix Geißendörfer berichtete von einem schnell arbeitendem Javascript auf Serverseite, mit dem spielend einfach und extrem performant Netzwerkapplikationen geschrieben werden konnten. Dies brachte mich auf die Idee, dass es vielleicht möglich wäre, den bei Etherpad serverseitigen Javascript Code, der dort mit Rhino ausgeführt wird, auf Node.js zu portieren. Damit wären wir in der Lage die Synchronisierungsalgorithmen von Etherpad mitzunehmen und gleichzeitig von der Java-Plattform wegzukommen. Die Idee war damit geboren.
Kurz danach beendete ich meine Ausbildung und zog nach England um, um dort einen Job als “Etherpad Developer” anzufangen. Die Firma nennt sich Primary Technology und unterstützt Primary Schools mit Hard- und Software. Die Firma betreibt auch eine Etherpad-Instanz namens “Primarypad“, auf der Schüler zusammen Hausaufgaben erledigen und im Klassenzimmer gemeinsam arbeiten können. Der Leiter dieser Firma ist John McLear, der zugleich auch Vorsitzender der Etherpad Foundation ist. Primarypad kämpft mit den selben Problemen, mit denen auch das Piratenpad kämpft, auch wenn hier ein Großteil der Probleme einfach mit extrem großzügiger Hardware erschlagen wird. Als Teil meines Jobs sollte ich Etherpad verbessern und um neue Funktionen erweitern.
Ich erzählte John sowie einigen Leuten von meiner Idee, Etherpad auf Node.js zu portieren. Mir wurde erzählt, dass das Vorhaben unmöglich sei und man lieber die Zeit damit verbringen sollte, Etherpad zu verbessern. Selbst wenn es funktionieren würde, müsste man alle Funktionen neu schreiben und alle bis dahin aufgebrachte Arbeit wäre umsonst. Außerdem sei der Ressourcenverbrauch gar nicht so schlimm, wie ich ihn empfände.
In einer Woche, in der John im Urlaub war und mich ohne Aufgaben hinterlassen hatte, versuchte ich die Machbarkeit meiner Idee zu beweisen. Und tatsächlich gelang es mir, die Synchronisierungsalgorithmen von Rhino auf Node.js Javascript zu portieren und mit dem clientseitigen Etherpad zu kommunzieren. Diese Version war noch weit von dem entfernt, was Etherpad Lite heute ist. Aber es war zumindest ein Beweis, dass es machbar ist. Und das mit nur einem Bruchteil der Ressourcen und einer vereinfachten Installation.
Mein Werk wurde belächelt. Es hieß, dass es nie Augenhöhe mit Etherpad erreichen könnte, da man so viel neu schreiben müsste. Trotzdem wollte man die Arbeit nicht wegwerfen und die Einigung war schließlich, es “Etherpad Lite” zu nennen. Wir veröffentlichten es auf Github und ich arbeitete hauptsächlich am Wochenende weiter daran.
Als John mit anderen Kollegen der Firma über die Roadmap der als nächstes zu erledigenden Arbeiten sprach, fiel dort auch der Begriff Etherpad Lite. Der Fakt des geringen Ressourcenverbrauchs erschien den anderen als erstrebenswertes Ziel, denn das würde auch den enormen Hardwarebedarf und somit Kosten reduzieren. Damit wurde mir genehmigt, 3 Monate ausschließlich an Etherpad Lite zu arbeiten und es zur Produktionsreife zu entwickeln.
Mit der Zeit haben wir uns dann entschieden, Etherpad nicht einfach zu kopieren, sondern neu auszurichten. Das alte Etherpad hatte die öffentlichen Pads, die für Kunden zum Ausprobieren gedacht waren, sowie die privaten Pads die man käuflich erwerben konnte. Wir kamen zu dem Schluss, dass Etherpad mehr Sinn macht, wenn man die Technologie nicht mehr als eigenständige Applikation, sondern mehr als Plugin für andere Plattformen entwickelt. Somit wäre zum Beispiel ein Wiki mit Echtzeitbearbeitung denkbar.
Diesen Montag war es dann so weit. Nachdem ich zahlreiche Hilfe von anderen Entwicklern bekommen und die letzten 2 Wochen nahezu 7 Tage die Woche daran gearbeitet hatte, haben wir es veröffentlicht. Besonderen Dank für dieses schöne und moderne Layout möchte ich hier auch Robin Buse aussprechen. Das Feedback gibt uns Recht, dass die Idee gut und notwendig war. Die Schattenseite: In einer Woche gehe ich zurück nach Deutschland und Etherpad Lite wird vermutlich wieder ein Wochenendprojekt von mir und anderen Personen werden. Falls deine Firma also Interesse an der Open Source Weiterentwicklung von Etherpad Lite hat, dann meldet euch bitte. Ich würde mich freuen, an diesem Projekt Vollzeit weiterarbeiten zu können.

Creative Commons License
The Wie Etherpad Lite entstand by Pita Poison's Blog, unless otherwise expressly stated, is licensed under a Creative Commons Attribution 3.0 Germany License.

Posted: August 25th, 2011
Categories: Allgemein
Tags: , , , , ,
Comments: 6 Comments.
Comments
Comment from blitzkid - 27. August 2011 at 14:06

Vielen Dank für diese tolle Software!

[...] bei dem man als Admin froh war, wenn es lief und sich machtlos fühlte, wenn es Probleme gab", wie Peter Martischka seine Idee für eine Portierung von Etherpad auf Node.js erläutert. Martischka war einer der Administratoren der Etherpad-Server der Piratenpartei. Die Java Virtual [...]

Comment from David - 1. September 2011 at 10:53

Super Arbeit Peter! Mit Rhino habe ich mich auch des öfteren gequält, aber war die Performance von Node.js in der JS Ausführung der einzige Grund von der Java Plattform Abstand zu nehmen?

[...] von Etherpad lite lesen möchte, dem empfehle ich den Blog-Beitrag von Peter Martischka: Wie Etherpad lite entstand Beta, Kollaboration, Tool, Web-Anwendung 14. Oktober 2011von Matthias Zellmer Bei Flattr kann [...]

Comment from Johannes Ponader - 21. Oktober 2011 at 15:12

Vielen Dank für diese Arbeit!

Wäre es evtl. möglich, eine Navigation über Buttons zu implementieren, damit man auch in Android-Browsern schreiben kann? Das schreiben geht ja, auch ein Cursor wird angezeigt, ich kann den Curso nur nicht bewegen. Eine einblendbare Navigation mit vier Buttons zum Scrollen und einem Feld zum Direktsprung in eine bestimmte Zeile würde das Problem elegant lösen.
Geht das technisch?


Impressum