////
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at

     https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
////

= Ivy Proposal =

The following presents the proposal for creating a new Ivy project within the Apache Software Foundation.

== Abstract ==
Ivy (http://www.jayasoft.org/ivy) is a Java based tool for tracking, resolving and managing project dependencies.

== Proposal ==
Ivy is a tool for managing (recording, tracking, resolving and reporting)  project dependencies. It is characterized by the following:

1. flexibility and configurability - Ivy is essentially process agnostic and is not tied to any methodology or structure. Instead it provides the necessary flexibility and configurability to be adapted to a broad range of dependency management and build processes.
2. tight integration with Apache Ant - while available as a standalone tool, Ivy works particularly well with Apache Ant providing a number of powerful Ant tasks ranging from dependency resolution to dependency reporting and publication.

== Rationale ==

Software development is increasingly characterized by leveraging externally provided components/capabilities and by a rapid release cycle. As a result it is not unusual for a project to depend on numerous third-party components which themselves may be dependent on a multitude of third-party of different or identical third-party components. Managing these dependencies - determining what the dependencies are, how they are used, the impact of a change, conflicts among dependencies, etc. - is extremely difficult and absolutely necessary. Ivy is one of a handful of tools addressing this need. While often compared to Maven - which has similar Ant tasks - Ivy differs from Maven in both its focus and philosophy. Ivy is solely focused on dependency management and is designed from the ground up to adapt to a wide range of requirements and scenarios. Examples include multiple artifacts per module, plugin resolvers, configurable repository configurations and conflict managers.

The maintainers of Ivy are interested in joining the Apache Software Foundation for several reasons:

* Ivy has been hosted since its beginning in 2004 by a private company, which make people feel like it's a corporate product, thus slowing the contribution by the community. We strongly believe in the open source movement, and would like to make Ivy independent from Jayasoft.
* We'd like to enjoy the benefits of utilizing Apache's infrastructure and legal protection.
* It might open the door for cooperation with other projects, such as Ant or Maven.
* We strongly believe in Apache philosophy, especially Meritocracy.

== Current status ==
=== Meritocracy ===

Ivy was originally created by Xavier Hanin in September 2004. Since then more than 20 users have contributed patches, and one of them has been promoted to the status of committer based on his merit through patch contribution.

=== Community ===

Ivy already has a growing user community, with more than 10,000 downloads since its 1.0 version and more than 500 users registered on the forum.

=== Core Developers ===

Ivy has only two core developers for the moment, but we hope joining the ASF will help increase this number.

Xavier Hanin is the creator of the project, is an independent consultant and co founder of Jayasoft. He has an experience of 9 years in Java software development, uses open source projects intensively, and started his real participation in open source development with Ivy.
Maarten Coene has joined the committer team in May 2006. He has an experience of 9 years in Java development, is co-administrator of dom4j, ex-committer for scarab, has contributed patches to several open-source projects and is a user of a lot of open-source projects.

=== Alignment ===

Ivy has no mandatory dependencies except Java 7. However, it is strongly recommended to be used with Ant. Ivy uses also other Apache projects, especially from Jakarta Commons.

== Known risks ==

=== Orphaned products ===
Due to its small number of committers, there is a risk of being orphaned. The main knowledge of the codebase is still mainly owned by Xavier Hanin. Even if Xavier has no plan to leave Ivy development, this is a problem we are aware of and know that need to be worked on so that the project become less dependent on an individual.

=== Inexperience with Open Source ===
While distributed under an open source license, access to Ivy was initially limited with no public access to the issue tracking system or svn repository. While things have changed since then - the svn repository is publicly accessible, a JIRA instance has been setup since June 2005, many new features are first discussed on the forum or JIRA - experience with a true open source development model is currently limited.
However, Maarten has already a good experience with true open development process, and bring his experience to the project.

=== Homogeneous Developers ===
With only two core developers, at least they are not homogeneous! Xavier and Maarten knew each other only due to their common interest in Ivy.

=== Reliance on Salaried Developers ===
Maarten is not paid to work on Ivy.
Xavier's case is more complex, as a co founder of Jayasoft, part of his time in Jayasoft was dedicated to Ivy and other open source developments. He now works mainly as an independent consultant, and thus is not a salaried developer.

=== Relationships with Other Apache Products ===
Ivy has a strong relationship with Apache Ant, and is often seen as a good companion of Ant. Being part of Apache could help for a closer collaboration between the two projects.

=== A Excessive Fascination with the Apache Brand ===
Even if we recognize the strong value of the Apache Brand, the purpose of joining Apache is not focused on improving the visibility of the project. The main focus of this proposition is to make Ivy a more open project, with a closer integration with Apache Ant. Even if Ivy does not join the ASF, Ivy will move out of Jayasoft umbrella and try to attract more developers.

== Documentation ==
Further reading on Ivy can be found at: +
http://www.jayasoft.org/ivy

== Initial Source ==
The initial code base can be found at: +
http://svn.jayasoft.org/projects/tools/ivy

== External Dependencies ==
Ivy has no mandatory dependencies at runtime.

For compilation, it requires: +
Apache Ant +
Apache Commons-HttpClient +
Apache Commons-CLI +
Apache ORO +
Apache Commons-VFS +
JCraft JSch  (BSD, already used by Commons-VFS and by Ant)

== Required Resources ==

=== Mailing lists ===
* ivy-private (with moderated subscriptions)
* ivy-dev
* ivy-user

=== Subversion Directory ===
https://svn.apache.org/repos/asf/incubator/ivy

=== Issue Tracking ===
JIRA Ivy (IVY) +
An import from existing JIRA issues at http://jira.jayasoft.org/ would also be very much appreciated

== Initial Committers ==
Xavier Hanin (xavier dot hanin at gmail dot com) +
Maarten Coene (maarten_coene at yahoo dot com)

== Affiliations ==
As stated in the Reliance on salaried developers section, Xavier is a co founder of Jayasoft which used to host the project. However, Jayasoft is shifting its focus to local consulting and thus won't be involved anymore in open source development. The participation of Xavier in the project is thus made as an individual, not as a member of Jayasoft. He also strongly believe in the meritocracy principle, and he's ready to see it applied to the project whatever the consequence are for his own weight in the project.

== Sponsors ==

=== Champion ===
Antoine Levy-Lambert +
Sylvain Wallez

=== Nominated Mentors ===
Antoine Levy-Lambert +
Stephane Baillez +
Steve Loughran

=== Sponsoring Entity ===
The Ant PMC has voted the following resolution: +
The Ant PMC sponsors Ivy moving to the Apache Incubator.
If the Ivy community wishes to move Ivy to become an Ant subproject
after successful incubation, and if the ASF board agrees to it, Ant
will welcome Ivy as a subproject after the incubation period.
