Symfony2 - UOS-Open-Source-Softwareentwicklung/oss1314 GitHub Wiki
Symfony2 – PHP-Web-Framework
Kurzbeschreibung eines Open Source-Projektes
Christian Flothmann, [email protected], Universität Osnabrück
Einsatzzweck
Symfony ist ein in PHP geschriebenes Framework auf MVC-Basis zur Entwicklung von Web-Applikationen. Das Framework basiert auf verschiedenen Komponenten, die einzelne Features (Routing, HTTP-Requests und -Responses, etc.) implementieren, die von Webanwendungen benötigt werden. Sie können sowohl einzeln für bestimmte Teilaufgaben oder als gesamtes Framework für so genannte Full-Stack-Applications genutzt werden.
Entstehungsgeschichte
Die erste Version des Symfony-Frameworks wurde 2005 von Fabien Potencier, einem französischen Software-Entwickler veröffentlicht. Die erste stabile Version wurde Anfang 2007 veröffentlicht. Die letzte Veröffentlichung der ersten Version des Frameworks war Symfony 1.4 und wurde Ende 2009 veröffentlicht.
Ein erstes Release von Symfony2 (im Folgenden Symfony) wurde 2011 veröffentlicht. Das Framework wurde mit dieser Version von Grund auf neu entwickelt. Kernbestandteil sind die bereits erwähnten Symfony Components, die nur lose gekoppelt sind und von Entwicklern sowohl einzeln als auch als komplettes Framework genutzt werden können.
Aktuell werden die Symfony-Versionen 2.3 und 2.4 unterstützt. Das neue Symfony-Release zur Version 2.5 wird im Mai 2014 veröffentlicht.
Die Symfony-Community
Die Hauptentwicklung von Symfony erfolgt durch etwa 25 Entwickler [1], wobei zu dem gesamten Quellcode 872 Entwickler beigetragen haben. [2] Den Kern der Entwicklergemeinde bilden die 16 Mitglieder des Symfony-Teams [3], die sich um die Betreuung der Git-Repositories für den Quelltext und die Dokumentation, den Entwicklungs- und Releaseprozess sowie die offizielle Internetpräsenz (http://www.symfony.com) kümmern.
SensioLabs
Eine führende Rolle hinter dem Symfony-Framework spielt die von Fabien Potencier gegründete Firma SensioLabs. Sie beschäftigt einige der Entwickler, koordiniert die Entwicklung und ist Ausrichter mehrerer jährlicher großer Symfony-Konferenzen. SensioLabs fördert und entwickelt nicht nur Open Source-Software, insbesondere aus dem PHP-Umfeld wie Twig (eine Template-Engine), Swiftmailer (eine Bibliothek zur Generierung und zum Versenden) und Silex (ein in PHP geschriebenes Micro-Framework) [4], sondern betreibt mit SensioLabs Connect auch ein rudimentäres soziales Netzwerk für die Symfony-Community. Weiterhin bietet die Firma professionellen Support zu Symfony, entwickelt an einer auf das Framework zugeschnittenen Entwicklungsgebung [5] und stellt mit SensioLabs Insight (https://insight.sensiolabs.com/) einen cloud-basierten Code-Analyse-Service bereit, mit dem Entwickler die Qualität ihrer PHP-Pakete automatisiert untersuchen lassen können.
Der Release-Prozess
Beginnend mit der Veröffentlichung von Symfony 2.3 werden halbjährlich (im Mai und im November) neue Symfony-Releases veröffentlicht. Jeder sechs-monatige Releasezyklus teilt sich in einen vier Monate dauernden Entwicklungsprozess, in dem neue Features implementiert werden, sowie eine zwei Monate dauernde Stabilisierungsphase, in der keine neuen Funktionalitäten mehr hinzugefügt, sondern Fehler behoben werden.
Alle zwei Jahre veröffentlicht die Community ein Long Term Support-Release (LTS-Release). Fehler in LTS-Releases werden drei Jahre lang mit Bugfixes und ein weiteres Jahr mit sicherheitskritschen Aktualisierungen versorgt. Zwischen zwei LTS-Releases werden insgesamt drei sogenannte Standard-Releases veröffentlicht. In diesen werden Fehler acht Monate lang behoben und anschließend ein weiteres halbes Jahr lang Fixes für Sicherheitslücken bereitgestellt. [6] Abbildung 1 visualisiert den Releaseprozess für die Symfony-Versionen bis 2.9.
Abbildung 1: Der Symfony Release Prozess, Fabien Potencier, CC BY-SA 3.0
Seit Symfony 2.3 verfolgt die Symfony-Entwicklung zudem eine eine Semantic Versioning-Strategie. [7] Dieser Strategie folgend werden neue Features nur dann in zukünftige Minor-Releases (2.5, 2.6, etc.) aufgenommen, wenn sie abwärts-kompatibel zu der API der vorhergehenden Minor-Releases sind, um Entwicklern ein problemloses Aktualisieren des Frameworks zu ermöglichen. [8]
Basierend auf diesem Versprechen zur Abwärtskompatibilität gibt es keine konkreten Planungen für ein zukünftiges Major-Release 3.0. Ein solches Release wird erst realisiert werden, wenn eine kritische Menge an Feature-Vorschlägen vorliegen, die nicht mehr abwärts-kompatibel zu früheren Minor-Releases implementiert werden können.
Lizenzen
Der gesamte Symfony-Quellcode unterliegt der MIT-Lizenz. Neben dem reinen Framework existiert die Symfony Standard Edition, eine Distribution, die neben dem Framework noch weitere Pakete von Drittanbietern enthält, die es Entwicklern ermöglicht, mit einer lauffähigen Basisapplikation in die Entwicklung neuer Projekte zu starten. Die hierbei zum Einsatz kommenden externen Pakete von Drittanbietern, sind ebenfalls MIT- oder BSD-lizensiert. Bis 2013 enthielt die Symfony Standard Edition auch der Apache 2.0 Lizenz unterliegende Bundles. Auf Grund von Inkompatibilitäten mit der GPL-Lizenz wurden diese Bundles mit dem Release von Symfony 2.3 aus der Standard Edition entfernt. [9] [10] Beiträge zu der offiziellen Symfony-Dokumentation unterliegen der Creative Commons CC BY-SA 3.0-Lizenz.
Technologie
Symfony ist in PHP geschrieben. Der Quellcode besteht aus fast 1,5 Mio. Zeilen, von denen knapp ein Drittel Kommentare sind. [1] Das Framework kann auf jedem Betriebssystem eingesetzt werden, auf dem ein Webserver mit Unterstützung für PHP ab Version 5.3 eingerichtet ist. [11] In der Symfony Standard Edition unterstützt das Framework die gängigen relationalen Datenbankmanagementsysteme durch Anbindung der Doctrine-Bibliothek [12] (alternativ kann als Abstraktionsschicht für relationale Datenbanken auch Propel genutzt werden [13]). Non-SQL-Datenbanken wie CouchDB oder MongoDB werden ebenfalls durch Bundles von Drittanbietern unterstützt.
Bundles sind in dem Symfony-Ökosystem wiederverwendbare Module, die bestimmte Funktionalitäten einer Applikation implementieren. Sie können sowohl Modelklassen, Controller und Views als auch weitreichende Domainlogik und sogar Assets wie JavaScript- und CSS-Dateien enthalten. [14] Die Symfony Components sowie Bibliotheken von Drittanbietern wie z.B. die Logger-Bibliothek Monolog (https://github.com/symfony/MonologBundle/blob/master/README.md) werden mittels Bundles in das Framework integriert.
Entwicklungstools und Kommunikation
Die Symfony-Entwicklung erfolgt in einem zentralen Git-Repository auf GitHub (https://github.com/symfony/symfony). Fehler werden über das Ticketsystem von GitHub gemeldet. Bis Ende 2013 wurde zum Vorschlagen neuer Features und deren Diskussion eine Gruppe bei Google Groups eingesetzt. Diese wurde offiziell im Dezember 2013 geschlossen. Seitdem wird das GitHub-Ticketsystem auch für Diskussion um neue Features eingesetzt1. Zudem gibt es auf dem IRC-Server Freenode die IRC-Kanäle #symfony-dev und #symfony-docs, die jedoch fast ausschließlich zur Koordination von sogenannten Hackdays genutzt werden.
Die einzelnen Symfony-Komponenten, die auch außerhalb des Full Stack Frameworks eingesetzt werden können, werden automatisch als Git-Subtrees in separate GitHub-Repositories synchronisiert (z. B. https://github.com/symfony/Console für die Console Komponente). Sowohl das komplette Framework als auch die einzelnen Komponenten können über das Tool Composer (https://getcomposer.org/, ein Werkzeug zur Abhängigkeitsverwaltung von PHP-Paketen) und dessen Marktplatz Packagist (https://packagist.org/) installiert werden.
User, die das Framework als Entwickler einsetzen, nutzen in der Regel die Symfony User Google Group (https://groups.google.com/forum/#!forum/symfony2) oder den stark frequentierten englischsprachigen IRC-Kanal #symfony. Mit #symfony-de, #symfony-fr und #symfony-nl existieren zudem ebenfalls recht ordentlich frequentierte IRC-Channels für deutsch-, französisch- und niederländisch-sprechende Entwickler. Zudem gibt es ein eher weniger genutztes offizielles Forum (http://forum.symfony-project.org/).
Referenzen:
- [1] The Symfony Open Source Project on Ohloh, http://www.ohloh.net/p/symfony, 24.03.2014
- [2] Contributors to symfony/symfony, https://github.com/symfony/symfony/graphs/contributors, 24.03.2014
- [3] Symfony Members, https://github.com/orgs/symfony/members, 24.03.2014
- [4] SensioLabs - We are committed, http://sensiolabs.com/en/a_propos/nous_sommes_engages.html, 24.03.2014
- [5] iX: Preview Release von SensioLabs Desktop, http://www.heise.de/ix/meldung/Preview-Release-von-SensioLabs-Desktop-1720122.html, 24.03.2014
- [6] The Release Process, http://symfony.com/doc/current/contributing/community/releases.html, 24.03.2014
- [7] Semantic Versioning 2.0.0, http://semver.org/, 24.03.2014
- [8] Our Backwards Compatibility Promise, http://symfony.com/doc/current/contributing/code/bc.html, 24.03.2014
- [9] Indicate that not all code is licensed under MIT, https://github.com/symfony/symfony-standard/issues/442, 28.03.2014
- [10] removed non-MIT/BSD licensed bundles and librairies, https://github.com/symfony/symfony-standard/commit/d84850acafb291bd3ae15e87c6b5aa389fe810cf, 24.03.2014
- [11] Installing and Configuring Symfony, http://symfony.com/doc/current/book/installation.html, 24.03.2014
- [12] Databases and Doctrine, http://symfony.com/doc/current/book/doctrine.html, 24.03.2014
- [13] Databases and Propel, http://symfony.com/doc/current/book/propel.html, 24.03.2014
- [14] Before you begin: Create the Bundle, http://symfony.com/doc/current/book/page_creation.html#before-you-begin-create-the-bundle, 24.03.2014
- [15] [IMPORTANT] This mailing list is officially closed, https://groups.google.com/forum/#!topic/symfony-devs/n2n2MH470uI, 24.03.2014