incubator-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Incubator Wiki] Update of "ZetaComponentsProposal" by TobiasSchlitt
Date Mon, 19 Apr 2010 13:42:27 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Incubator Wiki" for change notification.

The "ZetaComponentsProposal" page has been changed by TobiasSchlitt.
The comment on this change is: Initial creation of Zeta Components proposal..
http://wiki.apache.org/incubator/ZetaComponentsProposal

--------------------------------------------------

New page:
= Proposal: Zeta Components =

Zeta Components is a high-quality library of loosely coupled PHP components.

== Proposal ==

The Zeta project was originally named [[http://ezcomponents.org|eZ Components]]
and was developed as an open source project under New BSD license by
[[http://ez.no|eZ Systems AS]]. Involving a name change, eZ Systems is willing
relicense the source code basis and documentation and to 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. On the
one hand, Zeta contains standard components for e.g. database abstraction,
templating, email, image manipulation and more, on the other hand there are
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,
as well as on 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 [5]_ 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:

 * [[http://ezcomponents.org/s/Archive|Archive]]
 * [[http://ezcomponents.org/s/Authentication|Authentication]]
 * [[http://ezcomponents.org/s/AuthenticationDatabaseTiein|AuthenticationDatabaseTiein]]
 * [[http://ezcomponents.org/s/Base|Base]]
 * [[http://ezcomponents.org/s/Cache|Cache]]
 * [[http://ezcomponents.org/s/Configuration|Configuration]]
 * [[http://ezcomponents.org/s/ConsoleTools|ConsoleTools]]
 * [[http://ezcomponents.org/s/Database|Database]]
 * [[http://ezcomponents.org/s/DatabaseSchema|DatabaseSchema]]
 * [[http://ezcomponents.org/s/Debug|Debug]]
 * [[http://ezcomponents.org/s/Document|Document]]
 * [[http://ezcomponents.org/s/EventLog|EventLog]]
 * [[http://ezcomponents.org/s/EventLogDatabaseTiein|EventLogDatabaseTiein]]
 * [[http://ezcomponents.org/s/Execution|Execution]]
 * [[http://ezcomponents.org/s/Feed|Feed]]
 * [[http://ezcomponents.org/s/File|File]]
 * [[http://ezcomponents.org/s/Framework|Framework]]
 * [[http://ezcomponents.org/s/Graph|Graph]]
 * [[http://ezcomponents.org/s/GraphDatabaseTiein|GraphDatabaseTiein]]
 * [[http://ezcomponents.org/s/ImageAnalysis|ImageAnalysis]]
 * [[http://ezcomponents.org/s/ImageConversion|ImageConversion]]
 * [[http://ezcomponents.org/s/Mail|Mail]]
 * [[http://ezcomponents.org/s/MvcAuthenticationTiein|MvcAuthenticationTiein]]
 * [[http://ezcomponents.org/s/MvcFeedTiein|MvcFeedTiein]]
 * [[http://ezcomponents.org/s/MvcMailTiein|MvcMailTiein]]
 * [[http://ezcomponents.org/s/MvcTemplateTiein|MvcTemplateTiein]]
 * [[http://ezcomponents.org/s/MvcTools|MvcTools]]
 * [[http://ezcomponents.org/s/PersistentObject|PersistentObject]]
 * [[http://ezcomponents.org/s/PersistentObjectDatabaseSchemaTiein|PersistentObjectDatabaseSchemaTiein]]
 * [[http://ezcomponents.org/s/PhpGenerator|PhpGenerator]]
 * [[http://ezcomponents.org/s/Search|Search]]
 * [[http://ezcomponents.org/s/SignalSlot|SignalSlot]]
 * [[http://ezcomponents.org/s/SystemInformation|SystemInformation]]
 * [[http://ezcomponents.org/s/Template|Template]]
 * [[http://ezcomponents.org/s/TemplateTranslationTiein|TemplateTranslationTiein]]
 * [[http://ezcomponents.org/s/Translation|Translation]]
 * [[http://ezcomponents.org/s/TranslationCacheTiein|TranslationCacheTiein]]
 * [[http://ezcomponents.org/s/Tree|Tree]]
 * [[http://ezcomponents.org/s/TreeDatabaseTiein|TreeDatabaseTiein]]
 * [[http://ezcomponents.org/s/TreePersistentObjectTiein|TreePersistentObjectTiein]]
 * [[http://ezcomponents.org/s/Url|Url]]
 * [[http://ezcomponents.org/s/UserInput|UserInput]]
 * [[http://ezcomponents.org/s/Webdav|Webdav]]
 * [[http://ezcomponents.org/s/Workflow|Workflow]]
 * [[http://ezcomponents.org/s/WorkflowDatabaseTiein|WorkflowDatabaseTiein]]
 * [[http://ezcomponents.org/s/WorkflowEventLogTiein|WorkflowEventLogTiein]]
 * [[http://ezcomponents.org/s/WorkflowSignalSlotTiein|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
[[http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller|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
[[http://ezcomponents.org/contributing/dev_process|development process]] and the
[[http://ezcomponents.org/contributing/coding_standards|coding standards]].

=== History ===

The Zeta project was initially started in 2005 and developed until now by eZ
Systems under the name [[http://ezcomponents.org|eZ Components]]. The initial
goal was to refactor the core libraries used by the open source content
management system [[http://ez.no/ezpublish|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 [[http://ezcomponents.org/contributing/cla|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:

 * [[http://ezcomponents.org|Website]]
 * [[http://svn.ez.no/svn/ezcomponents/|Code repository]]
 * [[http://issues.ez.no/ProjectSelect.php?Id=1|Issue tracker]]
 * [[http://lists.ez.no/pipermail/components/Systems|Mailinglist archive]]

=== 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
 * Non test code consists of:
   * 1,909 classes:
     * 184 abstract classes (9.64%)
     * 1725 concrete classes
   * ~123 lines of code per class
 * Tests consist of:
   * 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:: 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:: 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:: 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.

 Mail:: 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:: 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:: 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:: 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:: 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
[[http://issues.ez.no/ProjectSelect.php?Id=1|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:: Derick works on the core and multiple extensions for the PHP language itself.
In addition, he is the creator of the widely used [[http://xdebug.org|Xdebug PHP debugging
extension]].

 Sebastian Bergmann:: As the creator and maintainer of [[http://www.phpunit.de|PHPUnit]],
Sebastian is head of development of this de-facto standard for unit testing in the PHP world.

 Kore Nordmann:: Kore Nordmann maintains several open source projects, for example [[http://arbitracker.org|Arbit]],
a PHP based issue tracking and project management system. Beside that, he regularly contributes
to various other projects in the PHP world.

 Tobias Schlitt:: As a long time member of the [[http://pear.php.net|PEAR project]], 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 [[http://planet-php.net|Planet PHP]].

=== 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 Systems community: http://ez.no/developer

 * 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 [[http://svn.ez.no/svn/ezcomponents/|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 ==

The current project infrastructure is hosted by eZ Systems, but this should
change. The project can be fully hosted on its own servers, sponsored by some
of the core contributors. However, for reliability reasons, there are some
services which we would want to have hosted by the ASF.

=== 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 ===

The core developers would better like to host issue tracking on their own,
since an issue tracker that is build upon Zeta Components
([[http://arbitracker.org|Arbit]]) already exists and is maintained by some of
the core developers. This tool also offers
[[http://en.wikipedia.org/wiki/Continuous_integration|continuous integration]]
facilities, which is important for the project.

== 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 accepted being our champion.

=== Nominated Mentors ===

We don't have mentors, yet, and are looking for them.

=== Sponsoring Entity ===

We want to kindly ask the Apache Incubator project for sponsoring.

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@incubator.apache.org
For additional commands, e-mail: cvs-help@incubator.apache.org


Mime
View raw message