|
| 1 | +Forks and variants |
| 2 | +================== |
| 3 | + |
| 4 | +This document describes how to best handle software forks in the context |
| 5 | +of updating ``publiccode.yml``. We define two different semantics that |
| 6 | +require different handling: technical forks and software variants. |
| 7 | + |
| 8 | +Technical forks (i.e. to publish patches) |
| 9 | +----------------------------------------- |
| 10 | + |
| 11 | +A technical fork is a fork made by a developer for the purpose of |
| 12 | +working on the original code base or sending improvements to the |
| 13 | +original authors, without any explicit goal of creating and publishing |
| 14 | +an alternative variant of the original software. |
| 15 | + |
| 16 | +In the context of distributed control systems and collaborative code |
| 17 | +hosting platforms like GitHub, forking is almost always used by |
| 18 | +developers as a step to work on a contribution on an existing codebase, |
| 19 | +by sending “pull requests”. |
| 20 | + |
| 21 | +Because of the way forking works on GitHub and other platforms, |
| 22 | +developers publish their forks as perfect copies of the original |
| 23 | +software, thus including also ``publiccode.yml``. However, parsers need |
| 24 | +to be able to distinguish such technical forks from the original |
| 25 | +codebase. |
| 26 | + |
| 27 | +Parsers |
| 28 | +~~~~~~~ |
| 29 | + |
| 30 | +Parsers **SHOULD** identify a technical fork by noticing that the |
| 31 | +top-level ``url`` key does not point to the repository in which the |
| 32 | +``publiccode.yml`` is found. |
| 33 | + |
| 34 | +Parsers **MIGHT** identify a technical fork also through metadata that |
| 35 | +might be exposed by the code hosting platform (eg: GitHub marks forks |
| 36 | +explicitly as forks) |
| 37 | + |
| 38 | +Authors |
| 39 | +~~~~~~~ |
| 40 | + |
| 41 | +Authors of technical forks **SHOULD NOT** modify ``publiccode.yml`` in |
| 42 | +any way. Specifically, they **MUST NOT** modify the top-level ``url`` |
| 43 | +key that **MUST** continue pointing to the original repository. |
| 44 | + |
| 45 | +There is no explicit key to mark a fork as a technical fork. This is a |
| 46 | +conscious design decision because we do not want authors of technical |
| 47 | +forks to be aware of ``publiccode.yml`` and necessarily be aware of how |
| 48 | +to modify it. The current design does not require authors to do |
| 49 | +anything. |
| 50 | + |
| 51 | +Software variants |
| 52 | +----------------- |
| 53 | + |
| 54 | +A software variant is a fork that is offered as an alternative to the |
| 55 | +original upstream software. |
| 56 | + |
| 57 | +It contains modifications that are still not part of the upstream |
| 58 | +version, like more features, different dependencies, optimizations, etc. |
| 59 | + |
| 60 | +By marking a fork as a variant, the author indicates that they believe |
| 61 | +that the variant includes a complete and working set of modifications |
| 62 | +that might be useful to other people. |
| 63 | + |
| 64 | +Marking a fork as a variant does **not** relate to the willingness of |
| 65 | +contributing upstream; the author might still plan to contribute the |
| 66 | +modifications upstream, or even being in the process of doing so. Thus, |
| 67 | +even if the fork will eventually be merged upstream, it might make sense |
| 68 | +to mark it as a variant during the process, so that others might |
| 69 | +discover it and benefit from it. |
| 70 | + |
| 71 | +.. _parsers-1: |
| 72 | + |
| 73 | +Parsers |
| 74 | +~~~~~~~ |
| 75 | + |
| 76 | +Parsers **SHOULD** identify a variant by noticing that the top-level |
| 77 | +``url`` key matches to the repository in which the ``publiccode.yml`` is |
| 78 | +found, **AND** a top-level ``isBasedOn`` exists and points to a |
| 79 | +different repository. |
| 80 | + |
| 81 | +Parsers should expect and analyze other differences in |
| 82 | +``publiccode.yml`` between variants of the software. Specifically |
| 83 | +``description/features`` is designed to be compared across variants to |
| 84 | +identify and show user-visible differences. |
| 85 | + |
| 86 | +.. _authors-1: |
| 87 | + |
| 88 | +Authors |
| 89 | +~~~~~~~ |
| 90 | + |
| 91 | +Authors that are willing to publish a fork as a variant **MUST** at |
| 92 | +least: |
| 93 | + |
| 94 | +- add a key ``isBasedOn`` pointing to one or more upstream repositories |
| 95 | + from which this variant is derived. |
| 96 | +- Change the value for ``url`` to point to the repository holding the |
| 97 | + variant. |
| 98 | +- Change the value for ``legal/repoOwner`` to refer to the themselves |
| 99 | + (the authors of the variant). |
| 100 | +- Revisit the ``maintenance`` section to refer to the maintenance |
| 101 | + status of the variant. |
| 102 | + |
| 103 | +Moreover, authors **SHOULD** evaluate the following changes: |
| 104 | + |
| 105 | +- add the features that differentiate the variant to the |
| 106 | + ``description/features`` key. Existing features **SHOULD NOT** be |
| 107 | + edited or removed from this list unless they have been removed from |
| 108 | + the variant, to allow parsers to easily compare feature lists. |
0 commit comments