Exponential Components (expcomponents): die Bibliotheken des Kernels, geforkt aus den Zeta Components
Seit 6.0.15 sind die PHP-Bibliotheken, auf denen der Kernel von Exponential aufbaut, die Exponential Components,
kurz expcomponents: der eigene Fork der Zeta Components durch Exponential, veröffentlicht als die Composer-Pakete
se7enxweb/expcomponents-<name>, wie der Code, aus dem sie stammen, unter der Apache License 2.0 lizenziert und
gepflegt von 7x und der Exponential Foundation. Die composer.json des Kernels verlangt die Forks anstelle der
Ursprungspakete zetacomponents/*. Die Klassen behalten ihre ezc-Namen und ihre APIs, daher ändert sich Code, der
sie verwendet, nicht.
Diese Seite ist für alle, die wissen wollen, was diese Bibliotheken sind, woher sie kommen, warum Exponential sie forkt, was gleich bleibt und wo jede einzelne zu finden ist. Was ein Upgrade für eine Installation, eine Erweiterung oder eigenen Code bedeutet, steht in den Upgrade-Hinweisen; was jedes Paket im Kernel tut, Klasse für Klasse, in der Paketreferenz; wie man an einem Fork arbeitet, in der Anleitung Zu expcomponents beitragen.
Inhalt
- Kurz gesagt
- Was die Komponenten sind
- Geschichte: eZ Components, Zeta Components, expcomponents
- Warum Exponential sie forkt
- Was gleich bleibt
- Was sich ändert
- Die Pakete
- Wie die alten Paketnamen weiter funktionieren: „replace“ in Composer
- Die Lizenz
- Wo die Repositories und Pakete sind
- Versionen und Releases
- Fehler melden und mitwirken
- Modernisierung: die Absicht
- Fragen und Antworten
- Verwandte Seiten
Kurz gesagt
| Frage | Antwort |
|---|---|
| Was ist es? | Der Fork der PHP-Bibliotheken Zeta Components durch Exponential (Archive, Mail, WebDAV, Feeds, MVC-Werkzeuge, die Datenbankschicht und mehr) |
| Paketnamen | se7enxweb/expcomponents-<name>, zum Beispiel se7enxweb/expcomponents-mail für zetacomponents/mail |
| Klassennamen | Unverändert: ezcMail, ezcArchive, ezcWebdavServer, ezcBaseFile ... |
| Lizenz | Apache License 2.0 (Apache-2.0), wie im Original; die Copyright- und Hinweistexte des Originals bleiben erhalten |
| Wer pflegt sie | 7x und die Exponential Foundation, öffentlich, auf GitHub unter se7enxweb |
| Was eine Installation tun muss | Nichts außer dem üblichen composer update eines Upgrades; siehe die Upgrade-Hinweise |
Code Dritter, der zetacomponents/<name> verlangt | Funktioniert weiter: Jeder Fork erklärt, dass er den alten Namen ersetzt |
| Seit | 6.0.15. Alle Forks wurden am 2026-11-06 veröffentlicht, und der Kernel verlangt sie seitdem; archive und webdav wurden schon einige Tage vorher als Forks verlangt |
Was die Komponenten sind
Die Komponenten sind eine Sammlung unabhängiger PHP-Bibliotheken, je ein Composer-Paket, von denen jede eine Aufgabe
gut erledigt: tar- und zip-Archive lesen und schreiben, E-Mails erstellen und versenden, WebDAV bereitstellen, RSS-
und Atom-Feeds schreiben, HTTP-Anfragen routen und verteilen, Werte zwischenspeichern, über PDO mit einer Datenbank
sprechen, Kommandozeilenoptionen auswerten und so weiter. Jedes Paket hat seine eigene Version, seine eigenen Tests und
seine eigene Dokumentation; alle teilen sich ein Basispaket (base) mit den Ausnahmeklassen, den Optionsklassen,
Dateihilfen und dem ursprünglichen Autoloader.
Jede Klasse jeder Komponente beginnt mit ezc („eZ Components“, der ursprüngliche Name), gefolgt von der Komponente:
ezcArchive, ezcMailSmtpTransport, ezcWebdavServer, ezcFeed, ezcMvcController, ezcCacheManager,
ezcDbFactory, ezcConsoleInput, ezcBaseFile. Die Bibliotheken verwenden keine PHP-Namensräume; das liegt an ihrem
Alter und ist kein Mangel, und es ist der Grund, warum die Klassennamen die Schnittstelle sind, die sich nicht ändern
darf.
Der Kernel verwendet sie an vielen Stellen, die man leicht übersieht: Import und Export von Paketen (archive), jede
E-Mail, die die Site verschickt (mail), der WebDAV-Server (index_webdav.php), der RSS-Export (feed), die REST-API und
die darauf gebauten Endpunkte für GraphQL, Hilfe und Migrationen (MVC-Werkzeuge, authentication, cache, debug, event
log, persistent object, database), Konsolenskripte (console tools), Setup > Systeminformationen (system information)
und die Veröffentlichungswarteschlange für Inhalte (signal slot). Die
Paketreferenz nennt die Klassen und Dateien für jede.
Geschichte: eZ Components, Zeta Components, expcomponents
Die Bibliotheken sind älter als der größte Teil des PHP-Ökosystems um sie herum, und sie haben vor diesem Fork zweimal den Besitzer gewechselt.
| Zeitraum | Name | Wer | Lizenz | Wo |
|---|---|---|---|---|
| Ab 2005 | eZ Components | eZ Systems AS, das norwegische Unternehmen hinter eZ Publish, dem Produkt, aus dem Exponential hervorging | New-BSD-Lizenz | ez.no, neben dem Code installiert (zum Beispiel als ezcomponents/trunk) |
| Ab 2010 | Apache Zeta Components | Der Inkubator der Apache Software Foundation, nachdem eZ Systems den Code eingebracht hatte | Apache License 2.0 | incubator.apache.org |
| Nach dem Inkubator | Zeta Components | Die Zeta Components development group, als unabhängiges Projekt | Apache License 2.0 | github.com/zetacomponents, Packagist zetacomponents/* |
| Seit 6.0.15 | Exponential Components (expcomponents) | 7x und die Exponential Foundation | Apache License 2.0 | github.com/se7enxweb, Packagist se7enxweb/expcomponents-* |
Die Lizenzdatei jedes Pakets erzählt diese Geschichte noch heute mit eigenen Worten: „Zeta Components, Copyright 2011-2015 The Zeta Components development group“, „Apache Zeta Components, Copyright 2010-2011 The Apache Software Foundation“, „Originally developed by eZ Systems as eZ Components, Copyright 2005-2010 eZ Systems AS“. Diese Zeilen bleiben in den Forks.
Was das für die Produktlinie bedeutete:
- eZ Publish 4.x, das eingestellte Produkt, aus dem Exponential hervorging, brauchte die eZ Components neben dem
Code installiert, in einer Mindestversion je Release (2008.2 für 4.1, 2009.1 für 4.2, 2009.2.1 für 4.3 und 4.4,
später die Sonderbuilds
ezcomponents-ezp45bisezcomponents-ezp47). Der Setup-Assistent prüfte das mit dem Testezcversion. - Exponential 6 installierte deren Fortführung, die Zeta Components, über Composer:
zetacomponents/*in dercomposer.jsonim Wurzelverzeichnis, geladen über die Klassen-Map von Composer. 6.0.11 (Dezember 2025) hob sie auf die Releases an, die PHP 8.5 unterstützen. - Exponential 6.0.15 forkte zuerst zwei davon, weil der Kernel Korrekturen brauchte, die das Original nicht
veröffentlicht hatte:
se7enxweb/expcomponents-webdav1.2.2 mit Sicherheitskorrekturen am WebDAV-Server (der Fork war vor seiner Umbenennung alsse7enxweb/zetacomponents-webdav1.2.1 veröffentlicht worden) undse7enxweb/expcomponents-archive1.5.2, das GNU-tar-Einträge mit langen Namen wieder entpackt und unter PHP 8.4 und 8.5 keine Deprecations mehr ausgibt. Dann machte das Projekt es offiziell: Jede Zeta Component, die der Kernel braucht, wird als expcomponents geforkt, alle 21 Forks wurden am 2026-11-06 veröffentlicht, und die Linie 6.0.15 verlangt sie anstelle der Ursprungspakete.
Warum Exponential sie forkt
- Die Aktivität im Original ist ungleich. Manche Pakete werden gepflegt und veröffentlicht (
baseunddatabase2026), andere hatten seit vielen Jahren kein Release:configuration,debug,event-log,image-analysisundsignal-slothaben ihr letztes Tag im Original aus dem Jahr 2015. Ein Kernel, der ein Supportfenster verspricht, kann nicht auf Releases warten, die vielleicht nicht kommen. - PHP 8.x. Exponential unterstützt PHP 8.0 bis 8.5 und läuft auf PHP 7.4. Jede neue PHP-Version erklärt etwas für
veraltet, das diese Bibliotheken tun (implizit nullbare Parameter, fehlende vorläufige Rückgabetypen,
nullan String-Funktionen). Eine Deprecation in einer Bibliothek wird zu einer Warnung in jedem Log jeder Site. Die Forks beheben sie dort, wo der Code ist, und ihre Tests laufen auf jeder PHP-Version, die der Kernel unterstützt. - Sicherheit. Korrekturen, die der Kernel braucht, müssen veröffentlicht werden können, wenn sie fertig sind. Der WebDAV-Fork ist das Beispiel: Sein Release 1.2.2 hält Anfragepfade und das Ziel von COPY und MOVE innerhalb der Wurzel des Backends, folgt keinen symbolischen Links aus ihr heraus, weist Anfragekörper mit einer Dokumenttyp-Deklaration ab, vergleicht die Digest-Authentifizierung in konstanter Zeit und erzeugt zufällige Sperr-Token.
- Ein Verantwortlicher für den ganzen Stack. Kernel, Erweiterungen und Bibliotheken werden zusammen getestet, veröffentlicht und dokumentiert, nach denselben Regeln (dauerhafte Tags, ein Changelog-Eintrag je Änderung, Tests zu jeder Korrektur).
- Modernisierung. Die Bibliotheken werden intern modernisiert; siehe die Absicht.
Ein Fork ist kein Bruch mit dem Original. Korrekturen, die allen nützen, werden dem Projekt Zeta Components als Pull-Requests angeboten, wie 7x es schon getan hat (das se7enxweb-Profil nennt 14 Sicherheits-Pull-Requests an Zeta Components im April 2026), und Korrekturen des Originals werden in die Forks übernommen (Abgleich mit dem Original).
Was gleich bleibt
- Die Klassennamen und die APIs. Jede Klasse behält ihren
ezc-Namen, jede öffentliche Methode ihre Signatur und Bedeutung. Code, dernew ezcMailComposer()aufruft oderezcWebdavSimpleBackenderweitert, funktioniert unverändert. Eine Änderung, die einen Aufrufer brechen würde, wird in der 1.x-Linie eines Forks nicht gemacht. - Die Dateien werden auf dieselbe Weise gefunden. Jedes Paket wird über die Klassen-Map von Composer geladen
(
"autoload": {"classmap": ["src"]}), genau wie das Ursprungspaket. Inautoload.php,config.phpoder den Klassen-Maps des Kernels ändert sich nichts. - Die Lizenz. Apache License 2.0. Die
LICENSE.txtdes Originals mit ihren Hinweiszeilen,CREDITS,ChangeLogund die Copyright-Köpfe in den Quelldateien bleiben, wie sie sind. - Die Versionslinie. Ein Fork führt die Versionsnummern des Originals fort: Das erste Fork-Release eines Pakets
folgt auf das Release des Originals, von dem es ausgeht (archive ging von 1.5.1 auf 1.5.2, webdav von 1.2 auf
1.2.2), daher behält eine Bedingung wie
~1.10ihre Bedeutung. - Die alten Paketnamen lösen sich auf. Über
replacein Composer (unten) wird eine Anforderung anzetacomponents/mailvonse7enxweb/expcomponents-mailerfüllt. - Einstellungen. Keine INI-Einstellung ändert sich.
setup.ini [ezcversion]prüft weiterhin auf die KlasseezcBaseFile, die der Fork vonbaseliefert.
Was sich ändert
- Die Paketnamen in
composer.json,composer.lock,composer showundcomposer licenses:se7enxweb/expcomponents-<name>stattzetacomponents/<name>. - Die Verzeichnisse in
vendor/:vendor/se7enxweb/expcomponents-<name>/stattvendor/zetacomponents/<name>/. Code, der eine Bibliotheksdatei über ihren Pfad einbindet (was er nicht sollte), muss folgen; Code, der die Klassen verwendet, bemerkt nichts. - Wohin Fehlermeldungen gehen: in das Repository des Forks unter
se7enxweb, nicht an das Projekt Zeta Components (unten). - Woher Releases kommen: Die Forks werden von 7x im Rhythmus von Exponential veröffentlicht, mit eigenen Release-Notes auf GitHub.
Die Pakete
Jede Zeta Component, die der Kernel braucht, hat einen Fork, und jeder Fork wurde am 2026-11-06 veröffentlicht und
steht auf Packagist. Die Tabelle nennt sie alle: das Ursprungspaket, seinen Fork, das Repository, das Release des
Originals, von dem der Fork ausgeht, das aktuelle Fork-Release und die Bedingung in der composer.json des Kernels
(Tilde- oder Caret-Form, nie eine exakte Version). Die mit neu markierten Repositories wurden angelegt, als der Fork
offiziell wurde; die übrigen bestanden schon.
| Ursprungspaket | Fork-Paket | Repository | Release des Originals | Fork-Release | Der Kernel verlangt |
|---|---|---|---|---|---|
zetacomponents/base | se7enxweb/expcomponents-base | expcomponents-base | 1.9.5 | 1.9.6 | ^1.9.6 |
zetacomponents/archive | se7enxweb/expcomponents-archive | expcomponents-archive | 1.5.1 | 1.5.3 (1.5.2 am 2026-11-03) | ~1.5.3 |
zetacomponents/authentication | se7enxweb/expcomponents-authentication | expcomponents-authentication | 1.4.1 | 1.4.2 | ~1.4.2 |
zetacomponents/cache | se7enxweb/expcomponents-cache | expcomponents-cache | 1.6.3 | 1.6.4 | ~1.6.4 |
zetacomponents/configuration | se7enxweb/expcomponents-configuration | expcomponents-configuration (neu) | 1.4 | 1.4.1 | ~1.4.1 |
zetacomponents/console-tools | se7enxweb/expcomponents-console-tools | expcomponents-console-tools (neu) | 1.7.5 | 1.7.6 | ^1.7.6 |
zetacomponents/database | se7enxweb/expcomponents-database | expcomponents-database | 1.5.4 | 1.5.5 | ~1.5.5 |
zetacomponents/debug | se7enxweb/expcomponents-debug | expcomponents-debug (neu) | 1.3 | 1.3.1 | ~1.3.1 |
zetacomponents/event-log | se7enxweb/expcomponents-event-log | expcomponents-event-log (neu) | 1.5 | 1.5.1 | ~1.5.1 |
zetacomponents/feed | se7enxweb/expcomponents-feed | expcomponents-feed (neu) | 1.4.6 | 1.4.7 | ~1.4.7 |
zetacomponents/image-analysis | se7enxweb/expcomponents-image-analysis | expcomponents-image-analysis (neu) | 1.2 | 1.2.1 | über image-conversion |
zetacomponents/image-conversion | se7enxweb/expcomponents-image-conversion | expcomponents-image-conversion | 1.5.1 | 1.5.2 | ~1.5.2 |
zetacomponents/mail | se7enxweb/expcomponents-mail | expcomponents-mail (neu) | 1.10.1 | 1.10.2 | ~1.10.2 |
zetacomponents/mvc-tools | se7enxweb/expcomponents-mvc-tools | expcomponents-mvc-tools (neu) | 1.2.4 | 1.2.5 | ~1.2.5 |
zetacomponents/persistent-object | se7enxweb/expcomponents-persistent-object | expcomponents-persistent-object | 1.8.2 | 1.8.3 | ~1.8.3 |
zetacomponents/signal-slot | se7enxweb/expcomponents-signal-slot | expcomponents-signal-slot (neu) | 1.2 | 1.2.1 | ~1.2.1 |
zetacomponents/system-information | se7enxweb/expcomponents-system-information | expcomponents-system-information (neu) | 1.1.2 | 1.1.3 | ~1.1.3 |
zetacomponents/webdav | se7enxweb/expcomponents-webdav | expcomponents-webdav | 1.2 | 1.2.3 (1.2.2 am 2026-11-01) | ~1.2.3 |
Der Fork von image-conversion enthält außerdem eine Korrektur, die dem Original als Pull-Request #9 von zetacomponents/ImageConversion angeboten wurde: Seit das Original ImageMagick über eine Argumentliste statt über eine Shell aufruft, scheiterten Skalieren und Zuschneiden mit „unrecognized option `-resize '“, und der Fork kürzt die Optionsnamen. Seine Release-Notes zu 1.5.2 nennen den Rest.
Der Mail-Fork 1.10.2 enthält die Änderungen, die das Original nach seinem Release 1.10.1 vorgenommen hat, darunter den
Schutz vor Header-Injection: Er weist eine Adresse mit Leerraum oder einem der Zeichen < > , ; " ab, bevor er einen
Header schreibt, weil eine solche Adresse den Header beenden oder Empfänger hinzufügen könnte
(Upgrade-Hinweise).
image-analysis verwendet der Kernel nicht direkt: image-conversion verlangt es, und der Bildeditor ezie verwendet
beide. configuration bleibt verlangt, solange 7x SQLI Import 2.0.x eine seiner Ausnahmen wirft.
Forks, die es gibt, die der Kernel aber nicht verlangt:
| Ursprungspaket | Fork-Paket | Warum er nicht verlangt wird |
|---|---|---|
zetacomponents/authentication-database-tiein | se7enxweb/expcomponents-authentication-database-tiein (1.2.1, veröffentlicht am 2026-11-06) | Kein Code des Kernels oder der Pakete, die er verlangt, verwendet es; der Kernel verlangt es seit Oktober 2026 nicht mehr (Verhaltensänderungen vom Oktober 2026). |
zetacomponents/graph | se7enxweb/expcomponents-graph (1.7.3, veröffentlicht am 2026-11-06) | Weder der Kernel noch eine mitgelieferte Erweiterung zeichnet damit Diagramme; der Fork ist für Erweiterungen da, die es tun. |
zetacomponents/workflow | se7enxweb/expcomponents-workflow (1.5.2, veröffentlicht am 2026-11-06) | Der Kernel hat seine eigene Workflow-Engine (eZWorkflow); der Fork ist für Erweiterungen da, die die Komponente verwenden. |
Ursprungspakete, die nicht geforkt werden:
zetacomponents/mvc-authentication-tieinundzetacomponents/php-generator: Der Kernel verlangt sie seit Oktober 2026 nicht mehr; nichts verwendet sie.zetacomponents/unit-test,zetacomponents/database-schemaundzetacomponents/coding-standard: Entwicklungsabhängigkeiten der eigenen Testsuiten der Forks; sie bleiben im Original.
Keine composer.json einer mitgelieferten Erweiterung verlangt ein Paket zetacomponents/*, und auch das Metapaket
se7enxweb/exponential-php-floor verlangt keines; der Wechsel geschieht allein in der composer.json des Kernels.
Wie die alten Paketnamen weiter funktionieren: „replace“ in Composer
Die composer.json jedes Forks sagt, welches Paket er ersetzt. Der Archive-Fork, wie veröffentlicht:
{
"name": "se7enxweb/expcomponents-archive",
"license": "Apache-2.0",
"require": {
"php": ">=7.1",
"se7enxweb/expcomponents-base": "~1.8"
},
"replace": {
"zetacomponents/archive": "self.version"
}
}Was replace für Composer bedeutet:
- Eine Anforderung an den alten Namen erfüllt der Fork. Ein Paket, das
zetacomponents/archive ~1.5verlangt, wird vonse7enxweb/expcomponents-archive1.5.3 erfüllt, weilself.versionden Fork für dieselbe Version des alten Namens eintreten lässt. - Das alte Paket wird nicht daneben installiert. Ein ersetztes Paket und sein Ersatz werden nie zusammen installiert; es gibt eine Kopie jeder Klasse.
- Die Forks verlangen einander mit ihren Fork-Namen. Der Archive-Fork oben verlangt
se7enxweb/expcomponents-base, nichtzetacomponents/base; ein Paket Dritter, das nochzetacomponents/baseverlangt, erhält den Base-Fork über dessenreplace, und das ursprünglichebasewird nicht installiert. - Der WebDAV-Fork ersetzt zwei Namen:
zetacomponents/webdavundse7enxweb/zetacomponents-webdav, den Namen, unter dem er 1.2.1 veröffentlicht wurde.
replace benennt keine Klasse um und legt keinen Alias an; es sagt Composer nur, welche Pakete austauschbar sind. Das
genügt hier, weil die Klassen dieselben sind.
Die Lizenz
Die Forks stehen unter der Apache License, Version 2.0 (Apache-2.0 in composer.json), der Lizenz der Zeta
Components, aus denen sie stammen. Apache 2.0 erlaubt jedem, den Code zu verwenden, zu ändern und weiterzugeben,
auch in einem Fork, unter diesen Bedingungen, denen die Forks folgen:
- jedes Paket behält den Lizenztext und die Hinweiszeilen, mit denen es kam (
LICENSE.txtmit den Hinweisen der Zeta Components development group, der Apache Software Foundation und von eZ Systems AS), und die Copyright-Köpfe in seinen Quelldateien; - Apache 2.0 (Abschnitt 4(b)) verlangt, dass geänderte Dateien gut sichtbare Hinweise tragen, dass sie geändert wurden;
jede Änderung eines Forks ist ein Commit mit eigener Nachricht und ein Eintrag im
ChangeLogdes Pakets, und die Release-Notes führen sie auf; - jeder Fork liefert eine Datei
NOTICE(Apache 2.0, Abschnitt 4(d)), die die Copyright-Hinweise des Originals behält und den Fork nennt; auch die Hinweiszeilen am Anfang vonLICENSE.txtbleiben.
Der Kernel von Exponential selbst steht unter der GNU GPL Version 2 oder (nach Ihrer Wahl) jeder späteren Version
(GPL-2.0-or-later). Wie beides zusammenpasst, kurz und ohne Übertreibung: Die Free Software Foundation hält die
Apache License 2.0 für kompatibel mit GPL Version 3 und für inkompatibel mit ausschließlich GPL Version 2. Weil die
Lizenz des Kernels „oder jede spätere Version“ enthält, kann der Kernel zusammen mit Bibliotheken unter Apache 2.0
unter GPL Version 3 verbreitet werden. Das ist dieselbe Lage wie mit den ursprünglichen Zeta Components vor dem Fork;
der Fork ändert daran nichts. Eine Erweiterung unter ausschließlich GPL Version 2, die Code unter Apache 2.0
mitliefert, ist der Fall, den man genau ansehen sollte
(Lizenzen und Kompatibilität).
Das ist keine Rechtsberatung; fragen Sie zu Ihrer eigenen Verbreitung einen Rechtsbeistand.
Wo die Repositories und Pakete sind
- Repositories:
https://github.com/se7enxweb/expcomponents-<name>, zum Beispiel github.com/se7enxweb/expcomponents-mail. Jedes ist ein GitHub-Fork des passenden Repositorys unter github.com/zetacomponents (zum Beispielzetacomponents/Mail), daher bleibt die Geschichte des Originals erhalten und sichtbar. - Pakete: auf Packagist als
se7enxweb/expcomponents-<name>, zum Beispiel packagist.org/packages/se7enxweb/expcomponents-archive. Jeder Fork ist dort seit seinem Release am 2026-11-06. - Dokumentation: der Ordner
docs/und dieREADMEjedes Repositorys. Die API ist dieselbe wie im Original, daher beschreibt die Dokumentation der Zeta Components sie weiterhin. - Installierte Kopien:
vendor/se7enxweb/expcomponents-<name>/in einer Installation;composer showlistet sie.
Versionen und Releases
- Die Version eines Forks führt die Linie des Originals fort und erhöht für jedes Release die letzte Stelle: 1.5.1 im Original, dann 1.5.2, 1.5.3 ... im Fork. Auf 1.5.9 folgt 1.5.10; das Erreichen der Neun verschiebt nie eine höhere Stelle.
- Tags haben kein Präfix
v(1.5.2, nichtv1.5.2), wie im Original. - Ein veröffentlichtes Tag ist dauerhaft. Es wird nie verschoben, gelöscht oder neu erstellt; ein Fehler in einem Release wird mit dem nächsten Release korrigiert, dessen Notes sagen, was falsch war.
- Der Kernel verlangt jeden Fork mit einer Tilde-Bedingung (
~1.5.2), die jedes spätere Release derselben Linie annimmt (1.5.3, 1.5.10) und keine neue Minor-Linie. - Releases geben die Verantwortlichen frei. Die Release-Notes jedes Forks auf GitHub sind der Nachweis dessen, was veröffentlicht wurde.
Fehler melden und mitwirken
- Ein Problem in einer Bibliothek (ein Fehler in
ezcMail..., ein WebDAV-Client, der scheitert, eine Deprecation aus einer Datei invendor/se7enxweb/expcomponents-*): Eröffnen Sie ein Issue im Repository dieses Forks. Nennen Sie das Paket und seine Version (composer show se7enxweb/expcomponents-mail), die PHP-Version und den kleinsten Code, der es zeigt. - Ein Sicherheitsproblem: Eröffnen Sie kein öffentliches Issue. Melden Sie es, wie die
SECURITY.mddes Kernels sagt ([email protected]). - Unklar, ob es am Kernel oder an der Bibliothek liegt: Eröffnen Sie es beim Kernel,
se7enxweb/exponential; es wird verschoben. - Code: ein Pull-Request an den Fork, mit einem Test. Wie man klont, die Tests auf mehreren PHP-Versionen ausführt und die Commit-Nachricht schreibt: Zu expcomponents beitragen.
Modernisierung: die Absicht
In den Worten des Eigentümers forkt das Projekt die Zeta Components offiziell unter der Apache-2.0-Lizenz und modernisiert ihre Funktionen intern („officially forking zeta components under apache 2.0 license and modernizing its features internally“). Was das bedeutet und was nicht:
- Die Modernisierung ist intern: Der Code in den Bibliotheken wird auf den Stand von aktuellem PHP gebracht, während Klassennamen und öffentliche API bleiben, wie sie sind, sodass der Kernel und jede Erweiterung weiter funktionieren.
- Sie geschieht Paket für Paket, Release für Release, jede Änderung mit Tests, die auf jeder unterstützten PHP-Version laufen, und jedes Release mit Notes, die sagen, was sich geändert hat.
- Alles, was ein Verhalten ändern würde, das ein Aufrufer sehen kann, wird in den Release-Notes des Forks und im Changelog des Kernels dokumentiert, bevor es verlangt wird.
Hier gibt es keine Liste neuer Funktionen anzukündigen. Wenn ein Fork eine bekommt, sagen es seine Release-Notes und diese Seite.
Fragen und Antworten
Muss ich meinen Code ändern?
Nein, es sei denn, er bindet eine Bibliotheksdatei über ihren Pfad unter vendor/zetacomponents/ ein. Klassen,
Methoden und Einstellungen sind unverändert.
Meine Erweiterung verlangt zetacomponents/mail. Wird sie noch installiert?
Ja. se7enxweb/expcomponents-mail ersetzt zetacomponents/mail, daher zählt Composer die Anforderung als erfüllt.
Sie können die Anforderung bei Gelegenheit auf den Namen des Forks ändern (Upgrade-Hinweise).
Kann ich zu den Ursprungspaketen zurück?
Ja: Die Upgrade-Hinweise zeigen, wie (in einem Git-Klon in der
composer.json des Kernels, in einem Composer-Projekt durch Verbleiben beim vorigen Kernel-Release) und
was Sie dabei verlieren (die Korrekturen der Forks, vor allem die Sicherheitskorrekturen an WebDAV).
Ist das weiterhin Open Source? Ja. Apache License 2.0, öffentliche Repositories, öffentliche Issues.
Werden die Forks auf Namensräume umgestellt?
Nicht auf eine Weise, die Aufrufer bricht. Die ezc-Klassennamen sind das Kompatibilitätsversprechen.
Warum „expcomponents“ und nicht „zetacomponents“?
Ein Fork trägt den Namen des Projekts, das ihn pflegt, damit niemand seine Releases mit denen des Originalprojekts
verwechselt. Das Präfix exp ist das, das Exponential für eigenen Code verwendet.