Node - UOS-Open-Source-Softwareentwicklung/oss1314 GitHub Wiki
Kurzbeschreibung eines Open-Source-Projektes
Universität Osnabrück
Tilo Wiedera - [email protected]
Übersicht
Node stellt eine Plattform zur Entwicklung von performanten und ausgezeichnet skalierbaren Netzwerkanwendungen bereit. [1] Das Framework findet vielfältigen Einsatz, wird aber primär für HTTP-Server verwendet. Auch renommierte Unternehmen wie eBay, Microsoft und PayPal verwenden Node für ihre Produkte. [2] Mittlerweile ist um Node ein umfangreiches System von Erweiterungen und Modulen gewachsen, die für viele Anwendungen essentieller Bestandteil sind. Insbesondere sei an dieser Stelle npm als zentrale Anlaufstelle für Node-Module genannt. [3]
Motivation und Geschichte
Die Entwicklung von Node begann im Frühjahr 2009 druch Ryan Dahl. Ryan Dahl ist ein ehemaliger Student der Mathematik, der sich seit 2006 mit der Programmierung von Webapplikationen im Umfeld von PHP und Rails beschäftigt hat. Als Schlüsselerlebnis nennt Dahl das erstmalige Beobachten eines Dateiupload mit Fortschrittsanzeige. Node entstand nun aus dem Wunsch heraus, diese Technologie performanter nutzen zu können. [4] Als Zwischenprodukt entstand eine entsprechend schnelle C-Bibliothek, die aber wenig Anklang in der Open-Source Gemeinde fand. Dies liegt vermutlich primär darin begründet, dass C einige recht Einsteiger-unfreundliche Konzepte mit sich bringt. Infolgedessen versuchte Dahl die Bibliothek durch verschiedene Sprachen zu abstrahieren, so unter anderem durch Lua und Haskell. Nachdem Google’s Open-Source Javascript-Interpreter V8 mit der ersten Version von Chrome im September 2008 veröffentlicht wurde, begann Dahl Javascript als mögliche Sprache auszuloten. Größter Vorteil von Javascript ist, dass es keinerlei Interaktion mit dem Betriebssystem mit sich bringt und somit auch keinen blockierenden Code enthält. [5] Nachdem Dahl das Konzept und eine erste Applikation basierend auf einem Prototyp von Node auf der JSConf 2009 präsentierte, fand er eine Anstellung bei Joyent. Joyent entwickelt Cloud-Computing Lösungen und interessierte sich an einer internen Nutzung der Software, wobei diese weiterhin Open-Source lizensiert bleiben sollte. Die erste Version von Node wurde schließlich im Jahr 2011 veröffentlicht. Kurz danach erschien außerdem ein eigener Package-Manager names npm. Ohne ein entsprechendes Modul-Management wäre Node sicherlich nicht so populär wie es heute ist. Mittlerweile ist Dahl nicht mehr leitender Entwickler des Projekts, die Führung obliegt Timothy J. Fontaine, der ebenfalls für Joyent arbeitet. [6]
Entwicklungsmodell und Organisation
Node wird auf GitHub verwaltet. [7] Dabei entspricht die jeweils aktuelle Version dem Stand des durch Joyent verwalteten Repository. Grundsätzlich kann jeder zu dem Projekt beitragen, typischerweise werden Beiträge über Pull Requests auf Github realisiert. [8] Timothy J. Fontaine behält sich dabei, genau wie vormals Ryan Dahl, das Recht vor, bestimmte Änderungen nicht zu übernehmen. Außerdem werden größere Änderungen am Projekt vorher mit der Community über die Mailingliste abgestimmt. Node verfügt über eine umfangreiche Test-Suite, dies erleichtert auch die Validierung von Pull-Requests. Wie bereits erwähnt, ist Node ohne den Package-Manager npm nunmehr schwer vorstellbar. Eben weil npm eine so einfache Schnittstelle zur Erweiterung der Kernfunktionalität zur Verfügung stellt, kann die Entwicklung von Node nicht vollständig durch das offizielle Node Repository abgebildet werden. Mittlerweile (stand März 2014) existieren über 64.000 verschiedene Module wobei täglich rund 5 Millionen Downloads bzw. Installationen stattfinden. [3] Hier kann natürlich nicht von einem einheitlichen Entwicklungsmodell gesprochen werden, vielmehr obliegt es den Autoren der einzelnen Module, diese entsprechend organisiert zu führen. Auffällig ist nichtsdestotrotz, dass viele der umfangreicheren Module ebenfalls auf GitHub, unter zu Node selbst vergleichbaren Bedingungen, entwickelt werden. Zu nennen seien hier beispielsweise die Module express.js [10] und coffeescript [11]. Laut ohloh.net hat die Entwicklung von Node entsprechend dem COCOMO bisher etwa 540 Personenjahre in Anspruch genommen. [12] Neben Joyent leistet sich auch Microsoft mindestens einen fest angestellten Mitarbeiter, der für die Portierung von Node auf Windows-Systeme zuständig ist und eng mit den von Joyent gestellten Entwicklern zusammenarbeitet. Isaac Schlueter, ebenfalls angestellt bei Joyent und zwischenzeitlich Node Projektleiter, ist für die Entwicklung von npm verantwortlich. [6] Entsprechend der Arbeitsorganisation über Github werden, abgesehen von größeren Sicherheitslücken, der integrierte Bugtracker und die Versionierung mittels git-Tags genutzt. Auch das Wiki auf Github enthält einige rudimentäre Informationen zum Projekt. Für detailliertere Einblicke sei hier aber auf den Blog und die offinzielle Website, http://nodejs.org, verwiesen. Node folgt keinem festen Release-Plan, sondern wird nach Ermessen von Timothy J. Fontaine in Absprache mit der Community aktualisiert. [13.a] [13.b]
Lizenzierung
Node ist MIT-Linzensiert [14], es handelt sich also um eine nicht infektiöse Linzenz. Dies hat zur heutigen Verbreitung möglicherweise wesentlich beigetragen. Allerdings enthält Node einige Drittanbieter-Lizenzen, hier seien insbesondere Google’s BSD lizenzierte V8 und der unter Artistic License 2.0 veröffentliche Modulmanager npm genannt. Node enthält eine Reihe weiterer Abhängigkeiten, die aber nicht im Konflikt mit der MIT-Lizenzierung des Projektes stehen. Interessant im Hinblick auf diese Thematik ist ebenfalls das sogenannte Contributor License Agreement. Dieser Vertrag räumt Joyent das Recht ein, den beigetragenen Quelltext unter der entsprechenden Lizenz zu veröffentlichen. Damit nimmt hier ein kommerziell ausgerichtetes Unternehmen die typische Rolle einer Stiftung (e.g. Apache Foundation) ein. [15]
Umfeld
Durch die liberale Linzenzierung von Node sind viele kommerzielle Produkte enstanden, die auf Node basieren. Auch Joyent selbst ist in starkem Maße von Node abhängig und verwendet es unter anderem innerhalb des Cloud-Computing Service. [16] Selbst Microsoft bietet einen eigenen Node-Hosting Service mit Windows Azure an. [17] eBay verwendet Node im Rahmen von ql.io, einer Software, die die parallele Aggregation und Verknüpfung von Informationen aus zahlreichen HTTP-APIs ermöglicht. [18] Allein das offizielle Node-Repository listet weltweit über 250 Unternehmen, die Node verwenden und über 100 weitere Applikationen, die auf Node basieren. [2] Damit muss Node mittlerweile auch eine immense wirtschaftliche Bedeutung zugesprochen werden.
Referenzen
- [1] Tom Hughes-Croucher, Mike Wilson (2012): Node: Up and Running, O'Reilly Media (pp. 3-4)
- [2] Projects, Applications, and Companies Using Node, https://github.com/joyent/node/wiki/Projects,-Applications,-and-Companies-Using-Node, 22.03.2014
- [3] npm, https://www.npmjs.org, 22.03.2014
- [4] Ryan Dahl - History of Node.js, https://www.youtube.com/watch?v=SAc0vQCC6UQ, 23.03.2014
- [5] Node.js and V8 History, http://nodegeek.net/2013/12/nodejs-v8-history/, 23.03.2014
- [6] Node - Wikipedia, http://en.wikipedia.org/wiki/Node#History, 23.03.2014
- [7] Joyent/Node, https://github.com/joyent/node, 23.03.2014
- [8] Contributing · Joyent/Node, https://github.com/joyent/node/wiki/Contributing, 23.03.2014
- [10] Visionmedia/Express, https://github.com/visionmedia/express, 23.03.2014
- [11] Jashkenas/Coffee-Script, https://github.com/jashkenas/coffee-script, 23.03.2014
- [12] The node.js (NodeJs) Open Source Project on Ohloh, http://www.ohloh.net/p/node, 23.03.2014
- [13.a] Node.js and the Road Ahead, http://blog.nodejs.org/2014/01/16/nodejs-road-ahead/, 23.03.2014
- [13.b] Strongloop | How the Node Community Works, http://strongloop.com/strongblog/how-the-node-community-works/, 23.03.2014
- [14] node/LICENSE, https://github.com/joyent/node/blob/master/LICENSE, 24.03.2014
- [15] Contributor License Agreement, http://nodejs.org/cla.html, 24.03.2014
- [16] Node.js Support, http://www.joyent.com/products/support-nodejs, 24.03.2014
- [17] Node.js Dev Center | Windows Azure, http://www.windowsazure.com/en-us/develop/nodejs/, 24.03.2014
- [18] Announcing ql.io, http://www.ebaytechblog.com/2011/11/30/announcing-ql-io, 24.03.2014