Community Code Contribution Process
Overview and Purpose
As caBIG® community members continue to gain experience with caBIG® tools, many have developed extensions or customized enhancements to the code base of existing, released tools. In the spirit of open source development, some developers wish to contribute their work back to the broad set of stakeholders that define the caBIG® community.
This page outlines the steps and process that community developers and caBIG® program team members should take to contribute (deposit) code with the NCI Center for Biomedical Informatics and Information Technology (CBIIT), which administers the caBIG® program. This process allows the posting of community-contributed code without committing to integrating the new code into the existing main trunk or release with which the code is associated. This allows for streamlined contributions of code by community members, and the subsequent availability of that code for others.
Step 1: Request to Contribute and Deposit Code
The following steps establish the request to deposit code:
- The caBIG® community member with code to deposit (Community Contributor) may post the request to deposit code on the caBIG® General Forum. An NCI caBIG® program team member that monitors the forum will connect the Community Contributor with the appropriate person who will help coordinate next steps (caBIG® Knowledge Center or product manager).
- Alternatively, the Community Contributor may contact the appropriate Knowledge Center representative to alert the Knowledge Center to the desire to deposit code. The Community Contributor makes this contact either through direct email if the Knowledge Center has an email address posted on its website, or as a forum post for the appropriate tool. Refer to the Knowledge Center Index for links to each Knowledge Center and to the Knowledge Center Forum Index for links to the forums.
- Once the Community Contributor has submitted the request, the appropriate program contact will be in touch to ask for the following information: (1) Contributor's name, institution, and Knowledge Center login ID (to establish technical permissions for the deposit into Subversion, the CBIIT code repository); and (2) overview information about the contribution, including the version of the tool the extension or enhancement is based on, and key functions provided by the code. See Step 3 for the list of specific items that will need to be submitted with the code.
Step 2: Internal caBIG® Coordination
- Once the Knowledge Center representative (or an alternative product manager) has the critical information listed here, he or she will coordinate with the CBIIT product lead and workspace leads and facilitators to: (1) approve the deposit action (again, this may be based upon minimal information gathered during the intake process above); and (2) assign an appropriate branch name based on tool-specific practices (branch should include tool name, the version of the tool upon which the code was developed, and the contributing institution's name).
- The Knowledge Center representative (or the product manager as appropriate) will then work directly with an Application Support representative, who will: (1) establish the new branch within CBIIT's Subversion in which to deposit the code; and (2) Adjust the Community Contributor's login permissions to allow the Contributor to deposit code into Subversion.
Step 3: Code Deposit Action
- Once Step 2 is complete, the Knowledge Center (or product manager) contacts the Community Contributor with the name of the newly established branch to deposit the code in, and with technical instructions for doing so as needed.
- The Community Contributor then deposits code in the designated location. The contribution must include files with the following accompanying information with the code itself:
- Clear description of the functions provided by the contributed code and how it functionally fits with the specific tool version it was developed upon;
- Release notes for the branch, including the disclaimer text in the following section;
- Point of Contact information;
- Test log (for example, regression testing results)
The Knowledge Center (or product manager) will complete a checklist for the Knowledge Center records indicating that all of the items are included with the code deposit: Download the Code Contribution Checklist
Community Code Branch Contribution License and Disclaimer Text: Include in Release Notes
The following language must be included in the release notes of any community contributed code. If you are contributing code, you must copy and paste this disclaimer language into the contributed code's release notes. Make sure you read completely before copying, so you are clear on the terms and conditions under which you are submitting the code.
This branch of software code ("Code Branch") is made available for your unrestricted use and is made available "AS IS" with no expressed or implied warranties of any sort (including but not limited to any implied warranties of merchantability, non-infringement and/or fitness for a particular purpose). You are advised that the Code Branch has not undergone testing by the National Cancer Institute (NCI) Center for Biomedical Informatics and Information Technology (CBIIT) and has not been assessed for potential integration with the main tool code base at the time of posting. You may not use the names "The National Cancer Institute", "NCI", "Cancer Biomedical Informatics Grid®" or "caBIG®" to endorse or promote products derived from this Code Branch. You are not authorized to use any trademarks, service marks, trade names, logos or products' names of NCI or the caBIG® program except as required to comply with the terms of this license and disclaimer.
This Code Branch is contributed by a caBIG® community participant ("Contributor") on its own initiative as a potential benefit to other caBIG® community members but its development was not funded, sponsored, or otherwise supported by the NCI in connection with the caBIG® program. By depositing code in the NCI CBIIT Subversion Repository, Contributor grants the United States Government (the "Government") a worldwide, non-exclusive, irrevocable, perpetual, transferable, fully sublicensable, fully paid up, royalty-free, and no-charge license to make, have made, practice, use, install, disclose, access, operate, execute, reproduce, adapt, modify, translate, create derivative works from, publish, perform, display, rent, sell, offer for sale, import, distribute or otherwise dispose of the Code Branch (in whole or part) and incorporate the Code Branch in other works, in any form, media, or technology made available by the Government and represents to the Government that it has full rights to contribute the Code Branch to the Government. Contributor has also agreed that if the Code Branch is subsequently integrated with the main tool code base, NCI's use and distribution of the integrated Code Branch by CBIIT will be subject to the terms of the caBIG® Model Open Source Software License. Your downloading, copying, modifying, displaying, distributing or using the Code Branch constitutes acceptance of the terms of this license and disclaimer.
In no event shall the Government, its contractors or subcontractors or Contributor be liable for any direct, indirect, incidental, special, exemplary, or consequential damages. You acknowledge that the Government is not liable for any damages or remedies in any form including, but not limited to, procurement of substitute goods or services; loss of use, data or profits; or business interruptions however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising with or as a result of the use of any software developed under the auspices of the caBIG® program or this Code Branch or both in combination, even if advised of the possibility of such damage. You are advised to compare the functionality of this Code Branch with any available formal development plans for the main caBIG® tool trunk to assess whether the functions and/or features provided by this Code Branch are planned for introduction into future releases of the software with which it is associated. Please contact the appropriate caBIG® Workspace for development plans if they are not posted.
Questions about this Code Branch should be directed to the point of contact identified with the Code Branch itself (contained in a separate file) as the associated caBIG® Workspace and/or caBIG® Knowledge Center representative(s) may not be the appropriate resource for specific questions about this Code Branch due to its participant-based origin. You are requested to please pass along feedback to the caBIG® Workspace or caBIG® Knowledge Center associated with the main caBIG® tool trunk to help shape the direction of future development efforts for the main caBIG® tool trunk, including feedback about the features and/or functions that this Code Branch offers or testing that you may have completed prior to adoption of this tool in support of your research efforts.
Acknowledging the Work of Contributors
It is important to NCI and the caBIG® program that Community Contributors receive and retain credit and acknowledgement of their contributed work, particularly if that work is later integrated within the main trunk or release of a tool. To that end, we encourage Code Contributors to insert the following note as a comment at the beginning of contributed code that represents a significant piece of work (e.g., a new interface for a component, or a piece of new functionality):
If later developers significantly modify the contributed code, they may add a line that states: "Modified by Developer, Institution, Year" immediately following the contribution line. The original contributors' name(s) may not be removed after modification of integration, as it is important that the acknowledgement of the original work persists over time. For significant pieces of work that are later integrated within the main branch or release, NCI and the caBIG® program will also work to include listed developers in the updated documentation for the release that includes that contributed code. If acknowledgement is desired on a specific user interface developed by the contributor, a "Contributed by Name, Institution, Year" line may be added in the footer of the user interface page corresponding to that contribution.
The following steps may occur after the process described above.
- Code Usage and Community Testing. Once the code is available in Subversion, others may access it; again, the license grant and disclaimer must be posted with the code. If the users who download the code subsequently test such code, they will be welcome to submit the testing log into the contributed code's repository line, so that others have access to this information.
- Outreach. Depending on the quality of the deposit, known interest in the functionality, and extent of documentation, the Knowledge Center, Workspace Lead, and the Product Manager(s) may discuss and mutually agree upon any appropriate web notices or pointers to publicize the availability of the branch to the broader community, based on the branch's functionality and likely attractiveness to other users of the tool.
- Evaluation for Entry into Development Governance Process. Some code contributions may reflect functionality that is determined to be of great interest across the community, either because they resolve known issues, or they extend the product to addresses expressed functional needs. In this case, the workspace, Knowledge Center and Product Manager may decide to consider the integration of the submitted code line as part of the tool's main trunk. In addition to this, there is a work group that is currently working on the structures, role, and processes that would govern these kinds of activities consistently across projects. Learn about this group's work at: Community Code Contribution and Integration WG Wiki.