| //Licensed 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 |
| // |
| //http://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. |
| = Initial Code Import |
| Apache Incubator PMC |
| 2002-10-16 |
| :jbake-type: guide |
| :jbake-status: published |
| :idprefix: |
| :toc: |
| :imagesdir: ../images/ |
| |
| For corporate contributions, the SGA or CCLA MUST be completed, submitted |
| and received before the code is imported. |
| |
| For contributions composed of patches from individual contributors, |
| it is safe to import the code once the major contributors (by volume) |
| have completed ICLAs or SGAs. |
| |
| In either case, the code to be imported should be attached to a JIRA |
| and then imported. It is recommended that the previous version |
| control system is tagged so that the imported version is precisely known. |
| |
| A public record MUST be made of the code imported. If the import is not |
| attached to JIRA then it MUST be committed to version control. |
| |
| == Importing History |
| |
| The incoming code can either be committed as a snapshot or as a complete version |
| control export including history (provided that the import is available in a format |
| readable by subversion). |
| Importing with history allows existing open source projects who want to maintain |
| older versions at Apache to easily perform source diffs and so on. Import just the |
| latest code allows a clean break to be made with the past. The choice is left to |
| the community of the incoming project. |
| |
| The infrastructure team will perform the import including |
| mapping IDs but it is an operation that requires skill, time and care. In this case, |
| please ask the infrastructure team politely. |
| |
| If you are importing from a github repository, you'll need to add one of our infra staff members as an admin to perform a move. |
| |
| == Audit Cryptography |
| |
| Before the code base is committed into an Apache repository, the contribution |
| link:http://www.apache.org/dev/crypto.html[MUST] be checked |
| and any restricted cryptography reported appropriately. Read and follow |
| link:http://www.apache.org/dev/crypto.html[this guide]. |
| |
| == Initial Clean Up |
| |
| Once a JIRA has been created, the source should be cleaned up. |
| |
| - Ensure source files use the standard Apache boilerplates. This may mean replacing existing license headers. The tools in link:https://svn.apache.org/repos/private/committers/tools[private/committers/tools] and link:https://svn.apache.org/repos/private/committers/relicense[private/committers/relicense] may be useful. |
| - Ensure that NOTICE and LICENSE documents are present and correct. Mentors should assist with this. |
| - Add any required notices. Consider moving copyright attributions from source documents to the NOTICE. Read link:http://www.apache.org/legal/src-headers.html[Apache policy on headers]. |
| - Audit the source for any potential licensing issues. Any which are found should either resolved immediately (when required) or noted in the status document for later. |
| |
| |
| It is recommended that the initial clean up be is started |
| before the code is committed. It MUST be completed before any |
| releases are cut. |
| |
| == Clean Up Best Practice |
| |
| It is recommended that version control is used to create a |
| public record of the process. This will assist anyone |
| auditing the code provenance (now or in the future) to |
| easily perform due diligence without contacting the people |
| who performed the clean up. The clean up process should |
| therefore clearly document (using version control) the |
| evolution of the IP licensing. |
| |
| Particular care needs to be taken with commit messages |
| during clean up. The intended audience needs to include |
| lawyers and code auditors. Members of the public need to be |
| able to follow and understand the process from these |
| messages alone. |
| |
| It is therefore recommended that the initial source is |
| (after being expanded from the archive) checked in as is |
| into a special directory (*${project}/trunk/import* is suggested). The original packaging, copyright statements |
| and license notices should be preserved. A standard Apache |
| LICENSE and appropriate NOTICE should be added at the top |
| for the copyright for the collective work (see link:http://www.apache.org/legal/src-headers.html[policy]). Take particular care with this commit message. As with |
| any patch that contains code which is not the original work |
| of the committer, the JIRA url (for the artifact imported) |
| needs to be included together with notes about the original |
| copyright owner and any associated paperwork. The fact that |
| this is a exact import including original headers should be |
| noted to stop any queries about these foreign headers. |
| |
| The cleanup should then proceed in a number of commits. If |
| the source provenance is complex, break the process up into |
| a number of logical steps committing each in turn with a |
| good message. |
| |
| In particular, take care when relocating copyright |
| statements and license notices into the NOTICE in the root |
| directory: consider moving each copyright owner individually |
| so that it is easier to audit. (See link:http://www.apache.org/legal/src-headers.html#notice[policy].) |
| |
| Once a section of code has been cleaned up |
| (and link:#repackaging[repackaged], if necessary) normal development can begin. |
| |
| == On Repackaging |
| |
| It is recommended - but not mandated - that source is repackaged |
| under the Apache namespace. There is no need to use the incubator |
| namespace. For example, Java source might be repackaged to |
| *org.apache.foo.Bar* or a DTD to *http://podling.apache.org/foo/bar*. |
| |
| Existing open source projects moving to Apache may well need to consider |
| carefully how they will approach this transition. |
| |
| == Update Documents |
| |
| Check the documentation for references to the old home of the project and update them |
| with references to Apache. |
| |
| Read |
| link:http://incubator.apache.org/guides/branding.html[Branding Guide]. |
| Ensure that appropriate disclaimers are added to the appropriate documentation. |
| Consider adding a *DISCLAIMER* text document. |
| |
| === Update Build |
| |
| If the project uses link:http://maven.apache.org[Apache Maven], the pom will |
| need to be updated to reflect that the project is now at Apache. In particular: |
| - Update *mailingLists* |
| - Update *organization* |
| - Update *url* |
| - Update *issueManagement* |
| - Check *licenses* |
| - Update *scm* |
| - Update *groupId* |
| - Update *manifestEntries*. It is recommended that the |
| standard Apache settings are used |
| - Update *developers* to use apache IDs (when known) |
| - Update *distributionManagement* |
| - Consider specifying a link:http://maven.apache.org/pom.html#relocation[relocation] |
| |
| If the project uses link:http://ant.apache.org[Apache Ant], the build script |
| will probably need to be updated. In particular: |
| - Ensure any MANIFESTs generated refer to Apache. It is recommended that the standard Apache settings are used. |
| - Check that *LICENSE*, *NOTICE* and - if appropriate - *DISCLAIMER* documents are copied into binary artifacts |
| |
| == Issue Tracking Transition |
| |
| Issues for Apache projects should be tracked on Apache hardware. Some projects arrive |
| with existing issues tracking. So, in the end these need to be replaced (for new development |
| at least) by the Apache issues tracker. Options need to be discussed publicly on list |
| and a consensus reached about the best transition strategy. |