Proposal: Zeta Components
Zeta Components is a high-quality library of loosely-coupled PHP components.
Status
- Discussed on the Incubator list
- Incorporated discussed changes
- First mentors volunteered on the mainlinglist
- Mentor acceptance for IPMC pending
- Called for votes on incubation
Proposal
Originally developed as an open source project named eZ Components by eZ Systems AS under New BSD license, eZ Systems has agreed to relicense the source code and documentation, under the name Zeta Components, and donate it to the Apache Software Foundation.
The goal of the project is to provide high-quality, loosely-coupled components for the development of applications based on PHP version 5.1 and above. Zeta contains standard PHP framework components (e.g. database abstraction, templating, email, image manipulation); and modules which are unique in the PHP world, like a document format conversion component, a WebDAV server module and a workflow based programming framework.
The project is developed with a strong focus on code and documentation quality, and backwards compatibility. It follows a well-defined development process with extensive architecture and design discussions, and prescribes a test-driven development approach.
Background
PHP is the most common language for developing web applications, but is also in use in other areas. While the language itself already ships with many libraries to solve different tasks, there is still a need for user land libraries to provide more complex repetitive functionality.
Zeta provides components dedicated to such functionality. An example for a tasks that can be solved using Zeta are processing and sending of email. This is already possible from within pure PHP. But working with multi-part MIME emails is not easily possible and a real pain when doing that on your own. For that reason, a module exists in Zeta which allows the developer to easily create and send such emails and to receive and process them.
The Zeta project currently consists of the following components:
- Archive
- Authentication
- AuthenticationDatabaseTiein
- Base
- Cache
- Configuration
- ConsoleTools
- Database
- DatabaseSchema
- Debug
- Document
- EventLog
- EventLogDatabaseTiein
- Execution
- Feed
- File
- Framework
- Graph
- GraphDatabaseTiein
- ImageAnalysis
- ImageConversion
- MvcAuthenticationTiein
- MvcFeedTiein
- MvcMailTiein
- MvcTemplateTiein
- MvcTools
- PersistentObject
- PersistentObjectDatabaseSchemaTiein
- PhpGenerator
- Search
- SignalSlot
- SystemInformation
- Template
- TemplateTranslationTiein
- Translation
- TranslationCacheTiein
- Tree
- TreeDatabaseTiein
- TreePersistentObjectTiein
- Url
- UserInput
- Webdav
- Workflow
- WorkflowDatabaseTiein
- WorkflowEventLogTiein
- WorkflowSignalSlotTiein
As can be seen, there are typical web-application modules included, such as the Feed component - which allows users to generate and consume different types of aggregation feeds -, the already mentioned Mail component, a template component for website templates and a WebDAV server component. Beside that, the library also contains many modules which are not only suitable for web applications, like a component for managing various archive file formats, multiple layers of database abstraction, tools for image manipulation, basic interfaces and implementations of a model-view-controller structure and more.
In contrast to other frameworks, the components in Zeta are loosely coupled and there are almost no hard inter-dependencies between them. Instead, if a component can be integrated with another one, a so-called Tiein component is provided, supplying the classes necessary to couple the components. This allows users to cherry pick the components they need, without the need of using the whole stack. That is especially useful for using the provided modules in legacy code or when there is a standard framework to build new applications on.
Rationale
Zeta is a library of high-quality, loosely coupled components for application development on basis of PHP. The project existed for five years now under the New BSD license, named eZ Components. It has been developed so far as a product of eZ Systems AS by a team of lately 4 core developers and received various contributions from 3rd parties.
The unique characteristics of the project are a strong focus on high-quality code and documentation as well as extensibility.
About the project
The Zeta project is well established under the name eZ Components and has a vital open source community around it. Its goal is to provide high-quality PHP code in form of general purpose, re-usable components. Being developed for 5 years now, the project has well established processes for development in place:
Zeta underlies very hard code and documentation quality constraints. For each new feature or component, requirements and architecture documents need to be provided and publicly discussed, before they are implemented. In addition, a test driven development approach is appointed, ensuring few bugs and backwards compatibility. Full API documentation, a tutorial and extensive examples are required for every components, before it is released.
More information about the development process can be found in the development process and the coding standards.
History
The Zeta project was initially started in 2005 and developed until now by eZ Systems under the name eZ Components. The initial goal was to refactor the core libraries used by the open source content management system eZ Publish for the purpose of cleaning up the code base and migrating it to PHP version 5.
Already during the initial planning phase, it turned out that a refactoring was not feasible and a re-write of the desired library became necessary. In addition, it was decided not to concentrate on the needs of eZ Publish exclusively, but to create a general purpose library.
The source code base was mainly developed by employees of eZ Systems under the New BSD license, with multiple contributions from 3rd parties. Every external contributor needed to sign a CLA which is derived from the CLA used by the Apache Software Foundation.
Since eZ Systems will still make use of the Zeta project and plans to even increase the usage drastically, their employees will continue to contribute. eZ Systems also maintains a very vital open source community around eZ Publish and it is expected, that their partners and contributors also make use of and contribute to the Zeta project.
The main development team of eZ Components left eZ Systems in early 2010. While their initial idea was to continue with the project themselves, they finally worked out the plan of moving the project into a dedicated foundation together with their old employer. The ASF was decided to be the most feasible new owner of the project.
To reflect the change of ownership and the changing project structure, the name eZ Components was changed to Zeta Components. The original development team is willing to maintain the project further on, as they already put lots of efforts into it and feel very passionate about it. eZ Systems is so kind to donate the IP of the source code basis, documentation and infrastructure code to the Apache Foundation.
The goal of all involved parties is, to avoid a re-focusing of the project, in terms of it becoming an exclusive part of the eZ Publish content management system, and to further develop Zeta as an independent project.
The most recent state of the eZ Components project can be found here:
Statistics
Zeta currently consists of:
- 712,708 lines of code:
- 294,234 of these are non*test code:
- 151,439 of these docs
- 142,795 of these non*docs
- 294,234 of these are non*test code:
- Non test code consists of:
- 1,909 classes:
- 184 abstract classes (9.64%)
- 1725 concrete classes
- ~123 lines of code per class
- 1,909 classes:
- Tests consist of:
- 651 classes with 7134 methods
- 651 classes with 7134 methods
Needs for Zeta Components
Some of the initial reasons to start the project have already been explained in the "About the project" section. Find in following a summary of the reasons why there is still a need for the project and where its benefits are:
While there are many frameworks and class repositories for the PHP language out there, none of them has such a strict focus on quality. Many frameworks are developed by hobby programmers and do therefore, or for historical reasons, not have a quality assurance process in place. The result is varying code quality and often un-maintained code. Many of them also still support PHP 4, which results in slow and hard to maintain code. In addition to that, many such projects suffer from lacking architecture and design processes, as well as naming and usage inconsistencies. Furthermore they allow code duplication and therefore do not give the user a consistent choice of functionality.
The Zeta project has, in contrast to that, strict quality assurance, architecture and design processes and consistent naming, development and documentation guidelines. Its components are built upon PHP 5.1 and support all later versions. Zeta focuses on generality and extensibility. Beside that, Zeta components provide many components which cannot be found in any other PHP library in this way. These are:
DatabaseSchema
indent |
---|
A component to read, write and store database schemas independent from the relational database system in use. Beside that, schema differences can be stored and written to a database to update the schema. |
Document
indent |
---|
Using this component, a developer can convert between many different document formats, like (X)HTML, [DocBook] XML, ODF, Wiki markup and more. The component is designed to support any kind of document format in the future. |
Graph
indent |
---|
This module is used to render many different kinds of charts from numerical data into various image file formats. It can be used with any of the image generation libraries available in PHP. |
indent |
---|
While most email libraries just support sending plain text or HTML emails, this component supports various email RFCs \[5\]_ including multi-part MIME. Furthermore it can receive email via IMAP and POP and process these mails to be presented in the very same way as they are represented for sending. |
PersistentObject
indent |
---|
This component is inspired by Javas Hibernate component, providing an object-relational mapping mechanism. It supports typical CRUD operations and has an optional layer for identity mapping. |
Search
indent |
---|
An abstraction layer for different search engines, one of them being Solr, is realized in this component. Its goal is to enable an application developer to transparently exchange the search engine used in an application. |
Webdav
indent |
---|
This module delivers a fully featured, customizable WebDAV (class 1 and 2) server implementation to the user. Its is developed with focus on interaction with different clients and to iron out their misbehaviours. The server can easily be integrated into custom applications. |
Workflow
indent |
---|
There is currently no other known library for graph (or workflow) driven development in PHP. This framework provides the basis for such a programming approach as well as control and storage mechanisms. |
The current code base is designed in a flexible and extensible way, so that integration of new features is easily possible. Several such feature additions have already been noted down in the issue tracker to be implemented in the future (current count is 124). In addition to that, several new components have already been discussed on the mailinglist for being added in the future.
The current user and developer base almost guarantees, the there is an active future for the project.
Zeta and the ASF
In early 2010 the last members of the eZ Components development team left eZ Systems for various reasons. Since they gave their all for the project in the past and still fully support the project and its ideals, the idea of spinning off the project into an independent foundation was born. Discussions with eZ Systems' management and developers turned out, that this is the way to go.
The Apache Software Foundation is the most accepted OSS foundation and best supports the ideas involved in the spin-off perfectly:
- Maintain clean IP
- Keep permissive licensing
- Grow the contributor base
- Stick to a meritocratic approach
There is no comparable project inside the ASF and we really think, that both parties (the project and the ASF) would benefit from contribution the code base. Zeta and its community will get a new and secure home and will flourish from the above named facts. The ASF will receive many new developers and enthusiasts, which are likely to also participate in the foundation itself and possibly other Apache projects.
Current status
The following sections give you an overview of the state of the Zeta project, in terms of its compatibility and willingness to become an Apache project.
Meritocracy
Although initialized and led by a company so far, the project has been following a quite meritocratic approach from its start. All technical decisions have been discussed publicly on the mailinglists and were never dictated by the management. Furthermore, the project was always open for 3rd party contributed components, patches and feature requests.
This approach is mainly the result of all core developers being involved in other open source projects around PHP. Find details on this in the "Core Developers" section of this document.
One reason for moving the project to the ASF is to stabilize and expand the meritocratic approach. We want to communicate this goal clearly to the community and want to gather more contributors for the project.
Community
eZ Components was mainly developed by the core team of lately 4 employees of eZ Systems. During the past 5 years, 10 employees contributed actively to the project. In addition, 18 external contributors signed the CLA and actively provided patches or full components to the project.
The project maintains a vital open source community, with currently more than 15 people active on the development mailinglist, discussing and contributing. In addition, there is an active IRC channel, which counts between 20 and 40 people and is used for support and technical discussions.
We are sure that this community will stay with the project, if it moves to the ASF, and that there is growing potential from the PHP users community. Especially when people realize that the project is no more a "product of eZ Systems", but a fully independent OSS project.
eZ Systems plans to integrate the components provided by the Zeta project further into their product eZ Publish. Therefore, the company also plans to have their developers contribute further. This includes bug fixes, feature additions and potentially new components.
In addition to that, there is a vital community of partners and open source contributors around eZ System's product eZ Publish. These parties already make heavy use of eZ Components and will continue to use it as Zeta Components, since the project provides essential building blocks for eZ Publish development. While some of them already contribute to the project, it is expected, that contributions and participation from this community grow in the future.
Beside that, the contributors are willing to represent and evangelize the project at open source events and to attract new contributors.
Core Developers
Zeta has four core developers by now, which all have a degree in computer science and are long time members of the open source community around PHP. As there are:
Derick Rethans
indent |
---|
Derick works on the core and multiple extensions for the PHP language itself. In addition, he is the creator of the widely used [Xdebug PHP debugging extension|http://xdebug.org]. |
Sebastian Bergmann
indent |
---|
As the creator and maintainer of [PHPUnit|http://www.phpunit.de], Sebastian is head of development of this de-facto standard for unit testing in the PHP world. |
Kore Nordmann
indent |
---|
Kore Nordmann maintains several open source projects, for example [Arbit|http://arbitracker.org], a PHP based issue tracking and project management system. Beside that, he regularly contributes to various other projects in the PHP world. |
Tobias Schlitt
indent |
---|
As a long time member of the [PEAR project|http://pear.php.net], the standard PHP code collection, Tobias has brought experiences in software architecture and PHP development. Beside his work on Zeta, he contributes to various other open source projects and is a maintainer of [Planet PHP|http://planet-php.net]. |
Alignment
The Zeta project fits especially into the ASF for its meritocratic development approach and the target of having a very permissive license. There is currently only one component in Zeta interacting with an ASF project: The Search component supports Solr as a backend. However, PHP is a project that is quite close to the ASF and many applications written on basis of Zeta will run in an Apache web server.
In addition, some employees of eZ Systems also contribute to other ASF projects. Jerome Renard maintains some custom Apache server modules and contributed bug reports and patches in the past. Paul Borgermanns contributes to Solr and Tika.
Known Risks
In following, we try to analyze the risks for the Zeta project.
Orphaned Products
The Zeta project has been developed for the past 5 years under the name eZ Components. There is a vital and active community around it. While the core development team has been paid for development in the past, they did that also with their heart and soul and will therefore not allow the project of becoming orphan.
eZ Systems will continue to use the project in its main product (eZ Publish) and even plans to extend the usage. To realize this, eZ Systems will make its developers contribute to the project.
The project is in use by many PHP companies and in open source projects like Arbit. In addition, 2 of the core developers plan to found a company and to build their business model onto this project, among others.
Chances that development of Zeta will die away in the future are therefore rare.
Inexperience with Open Source
The project exists since 5 years as an open source project and one reason for putting it into the ASF is to keep it this way. All core developers have long time experiences in leading and contributing to various open source projects. eZ Systems is an open source company and its business model is fully built upon OSS.
Homogeneous Developers
3 of the 4 core developers of Zeta reside in Germany, but work for 2 different companies. One of them resides in London, UK. eZ Systems is located in Norway and has a vital community of partners and contributors among Europe and even world wide. All parties involved in the project are looking forward to new team members from all over the world.
Reliance on Salaried Developers
The four core contributors were paid for working on the project in the past 5 years. However, their intention to work on the project on a not salaried basis is clear and strong, as can be seen by the efforts put into the project becoming independent.
eZ Systems might pay developers for working on Zeta in the future. Two of the core contributors might work on the project in terms of their own company in the future.
Relationships with Other Apache Products
Zeta Components are already used in some open source projects outside the Apache Foundation, like eZ Publish and Arbit. We encourage other projects to make use of the components and are looking forward to their feature requests and contributions. Beside that, the Search component in Zeta enables the easy usage of Solr (Lucene) from within PHP.
We would also be happy to receive technical input from any other Apache project and OSS projects in general and are looking forward to integrating with them.
A Excessive Fascination with the Apache Brand
All core contributors of the project already have a well-established standing in the OSS community, since they contribute to various projects for a long time now. The goal of joining the ASF is not driven by the demand of more publicity. None of the contributors has misdemeanors against any OSS project / foundation at any time.
However, the core contributors fully agree with the values and ideals of the ASF and would be happy to be part of this movement.
Documentation
- eZ Components: http://ezcomponents.org
- eZ Systems: http://ez.no
- eZ Publish: http://ez.no/ezpublish
- eZ Publish community: http://share.ez.no
- Mail component: http://ezcomponents.org/s/Mail
- Development process: http://ezcomponents.org/contributing/dev_process
- Coding guidelines: http://ezcomponents.org/contributing/coding_standards
- Current CLA: http://ezcomponents.org/contributing/cla
- Code repository: http://svn.ez.no/svn/ezcomponents/
- Issue tracker: http://issues.ez.no/ProjectSelect.php?Id=1
- Mailinglist: http://lists.ez.no/pipermail/components/Systems
- Xdebug: http://xdebug.org
- PHPUnit: http://www.phpunit.de
- Arbit: http://arbitracker.org
- PEAR: http://pear.php.net
- Planet PHP: http://planet-php.net
- Model-View-Controller: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
- Continuous integration: http://en.wikipedia.org/wiki/Continuous_integration
Initial Source
Alls source code was developed in the SVN repository provided by eZ Systems so far. This repository, including all releases and branches of the code, can be found in the original SVN.
External Dependencies
There are no external dependencies which need to be taken into account. Zeta components works on basis of PHP and its bundled libraries. It can optionally work with external tools like e.g. Solr and ImageMagick, but there is no reason to bundle these resources users are not forced to make use of them.
Required Resources
All essential project project infrastructure should be hosted in the ASF. This includes:
- SVN
- mailinglists
- basic website
- issue tracker
The version history of the old SVN (hosted by eZ Systems) should be imported to the ASF SVN.
Mailinglists
- zeta-private
- zeta-dev
- zeta-commits
- zeta-users (could initially also be handled on zeta-dev)
Subversion directory
We would like to have the code repository hosted by the ASF:
https://svn.apache.org/repos/asf/incubator/zeta
Issue Tracking
Although some of the core developers would favor having (Arbit) as the issue tracker, we agree that this essential piece of infrastructure should be hosted central in the ASF and not on a sponsored, external server. We would therefore go with Jira. Regarding CI, we will probably require a Hudson instance.
Initial Committers
- Derick Rethans <ezc@derickrethans.nl>
- Kore Nordmann <kore@php.net>
- Tobias Schlitt <toby@php.net>
- Sebastian Bergmann <sebastian@php.net>
- Ole Marius Smestad <oms@ez.no>
- Roland Benedetti <rbg@ez.no>
No CLAs sent, yet.
Affiliations
Ole Marius Smestad is head of development of eZ Publish, Roland Benedetti is product manager of eZ Publish, both employed by eZ Systems. Kore Nordmann and Tobias Schlitt are in the process of creating a company together. All four core contributors worked together on the original eZ Components project on behalf of their employment at eZ Systems AS, but are now independent of this company.
Sponsors
Champion
Erik Abele (ASF member) accepted being our champion.
Volunteered Mentors
- Julien Vermillard (ASF member, applying for IPMC)
- Craig L. Russel (ASF member)
- Christian Grobmeier (not ASF member, applying for IPMC)
Julien and Christian are waiting for acceptance by the IPMC.
We are still looking for more mentors.
Sponsoring Entity
We want to kindly ask the Apache Incubator project for sponsoring.