> Producing and Maintaining Packages
Overview
...
Best Practices
| # |
Title |
Description |
| 1. |
... |
... |
Further Details
- Minimize Upstream Impact: Avoid upstream design and build system impact to the distributions.
- There will be cases where the package design efforts help identify modest layout and build improvements, but generally the resulting packages should not impose significant impact on the distribution's design and build system.
- Reuse Existing Build Output: Wherever feasible, reuse as much of the existing binaries from the projects' build output. Ideally, the packaging process should feed directly off the results of the distribution's existing build facility.
- Retain Existing Filesystem Layout: Strive to retain the existing filesystem layout of the distribution where one already exists. Doing so will help minimize the switching costs for users who have already used the unpackaged zip form of a distribution.
- At the same time, use the package design efforts to identify improvements to filesystem layout and out-of-the-box user experience.
- Different Packages Based on Usage: Provide separate packages for those parts of a distribution that are often downloaded and/or used at different times and potentially by differently people. Consider:
- Likelihood of components being used separately
- Embedding scenarios
- Cases where distributions may want to obtain packages for their own build process
- Shear size of a component
- Err Toward Coarse Grained Packages: Avoid gratuitous packages. If several components are usually used together, then consider including them in the same package.
- Accept Existing Deployment Archives as is: Avoid trying to break up deployment-ready archives such as WAR files. Although WAR files typically contain libraries of external dependencies, don't try to represent all of those external dependencies in their own packages. Only do so when the distributions already deliver the external dependencies outside of such archives.
- Avoid Private Copies of Binaries: Where feasible, avoid packaging private copies of binaries. Apart from the deployment-ready archives considerations mentioned above, identify opportunities to establish package level dependencies on external dependencies and plan to deliver those external dependencies in package form such that the process of delivering updates to those external dependencies can be streamlined.
Example
...