]> git.ipfire.org Git - thirdparty/systemd.git/blame - docs/CONTRIBUTING.md
docs: drop .md suffixes again
[thirdparty/systemd.git] / docs / CONTRIBUTING.md
CommitLineData
c3e270f4
FB
1---
2title: Contributing
4cdca0af 3category: Contributing
b41a3f66 4layout: default
0aff7b75 5SPDX-License-Identifier: LGPL-2.1-or-later
c3e270f4
FB
6---
7
cc5fddef
LP
8# Contributing
9
945c6e7c 10We welcome contributions from everyone. However, please follow the following guidelines when posting a GitHub Pull Request or filing a GitHub Issue on the systemd project:
cc5fddef
LP
11
12## Filing Issues
13
868e6ce6 14* We use [GitHub Issues](https://github.com/systemd/systemd/issues) **exclusively** for tracking **bugs** and **feature** **requests** (RFEs) of systemd. If you are looking for help, please try the forums of your distribution first, or [systemd-devel mailing list](https://lists.freedesktop.org/mailman/listinfo/systemd-devel) for general questions about systemd.
c85b6ff1 15* We only track bugs in the **two** **most** **recently** **released** (non-rc) **versions** of systemd in the GitHub Issue tracker. If you are using an older version of systemd, please contact your distribution's bug tracker instead (see below). See [GitHub Release Page](https://github.com/systemd/systemd/releases) for the list of most recent releases.
c4bc2e93 16* When filing a feature request issue (RFE), please always check first if the newest upstream version of systemd already implements the feature, and whether there's already an issue filed for your feature by someone else.
945c6e7c 17* When filing an issue, specify the **systemd** **version** you are experiencing the issue with. Also, indicate which **distribution** you are using.
cc5fddef
LP
18* Please include an explanation how to reproduce the issue you are pointing out.
19
945c6e7c 20Following these guidelines makes it easier for us to process your issue, and ensures we won't close your issue right-away for being misfiled.
cc5fddef 21
75d96e22 22### Older downstream versions
efe05392 23
75d96e22 24For older versions that are still supported by your distribution please use respective downstream tracker:
efe05392 25
75d96e22 26* **Fedora** - [bugzilla](https://bugzilla.redhat.com/enter_bug.cgi?product=Fedora&component=systemd)
e868f5ef 27* **RHEL/CentOS stream** - [Jira](https://issues.redhat.com/secure/CreateIssueDetails!init.jspa?pid=12332745&issuetype=1&components=12380515&priority=10300) or [contribute to systemd-rhel @GitHub](https://github.com/redhat-plumbers#systemd)
75d96e22
LN
28* **Debian** - [bugs.debian.org](https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=systemd)
29
c2205a0d
ZJS
30## Security vulnerability reports
31
1b4dc2ea 32See [reporting of security vulnerabilities](SECURITY).
c2205a0d 33
cc5fddef
LP
34## Posting Pull Requests
35
d331f484 36* Make sure to post PRs only relative to a recent tip of the `main` branch.
1b4dc2ea
ZJS
37* Follow our [Coding Style](CODING_STYLE) when contributing code. This is a requirement for all code we merge.
38* Please make sure to test your change before submitting the PR. See the [Hacking guide](HACKING) for details on how to do this.
868e6ce6 39* Make sure to run the test suite locally, before posting your PR. We use a CI system, meaning we don't even look at your PR if the build and tests don't pass.
a87c45a8 40* If you need to update the code in an existing PR, force-push into the same branch, overriding old commits with new versions.
3efadceb 41* After you have pushed a new version, add a comment explaining the latest changes. If you are a member of the systemd project on GitHub, remove the `reviewed/needs-rework`/`ci-fails/needs-rework`/`needs-rebase` labels.
868e6ce6 42* If you are copying existing code from another source (eg: a compat header), please make sure the license is compatible with `LGPL-2.1-or-later`. If the license is not `LGPL-2.1-or-later`, please add a note to [`LICENSES/README.md`](https://github.com/systemd/systemd/blob/main/LICENSES/README.md).
d331f484 43* If the pull request stalls without review, post a ping in a comment after some time has passed. We are always short on reviewer time, and pull requests which haven't seen any recent activity can be easily forgotten.
bed1feaf 44* Github will automatically add the `please-review` label when a pull request is opened or updated. If you need
52c602d4 45more information after a review, you can comment `/please-review` on the pull request to have Github add the
bed1feaf 46`please-review` label to the pull request.
cc5fddef 47
3efadceb
ZJS
48## Reviewing Pull Requests
49
50* See [filtered list of pull requests](https://github.com/systemd/systemd/pulls?q=is%3Aopen+is%3Apr+-label%3A%22reviewed%2Fneeds-rework+%F0%9F%94%A8%22+-label%3Aneeds-rebase+-label%3Agood-to-merge%2Fwith-minor-suggestions+-label%3A%22good-to-merge%2Fwaiting-for-ci+%F0%9F%91%8D%22+-label%3Apostponed+-label%3A%22needs-reporter-feedback+%E2%9D%93%22+-label%3A%22dont-merge+%F0%9F%92%A3%22+-label%3A%22ci-fails%2Fneeds-rework+%F0%9F%94%A5%22+sort%3Aupdated-desc) for requests that are ready for review.
51* After performing a review, set
52
efe05392
JM
53 * `reviewed/needs-rework` if the pull request needs significant changes
54 * `ci-fails/needs-rework` if the automatic tests fail and the failure is relevant to the pull request
55 * `ci-failure-appears-unrelated` if the test failures seem irrelevant
56 * `needs-rebase` if the pull request needs a rebase because of conflicts
57 * `good-to-merge/waiting-for-ci` if the pull request should be merged without further review
58 * `good-to-merge/with-minor-suggestions` if the pull request should be merged after an update without going through another round of reviews
3efadceb
ZJS
59
60Unfortunately only members of the `systemd` organization on github can change labels.
61If your pull request is mislabeled, make a comment in the pull request and somebody will fix it.
62Reviews from non-members are still welcome.
63
cc5fddef
LP
64## Final Words
65
945c6e7c 66We'd like to apologize in advance if we are not able to process and reply to your issue or PR right-away. We have a lot of work to do, but we are trying our best!
cc5fddef
LP
67
68Thank you very much for your contributions!
ea7ded75
LB
69
70# Backward Compatibility And External Dependencies
71
72We strive to keep backward compatibility where possible and reasonable. The following are general guidelines, not hard
868e6ce6
ZJS
73rules, and case-by-case exceptions might be applied at the discretion of the maintainers. The current set of build-time
74and runtime dependencies are documented in the [README](https://github.com/systemd/systemd/blob/main/README).
ea7ded75
LB
75
76## New features
77
78It is fine for new features/functionality/tools/daemons to require bleeding edge external dependencies, provided there
868e6ce6 79are runtime and build-time graceful fallbacks (e.g.: a daemon will not be built, runtime functionality will be skipped with a clear log message).
ea7ded75
LB
80In case a new feature is added to both `systemd` and one of its dependencies, we expect the corresponding feature code to
81be merged upstream in the dependency before accepting our side of the implementation.
82Making use of new kernel syscalls can be achieved through compat wrappers in our tree (see: `src/basic/missing_syscall_def.h`),
83and does not need to wait for glibc support.
84
85## External Build/Runtime Dependencies
86
868e6ce6
ZJS
87It is often tempting to bump external dependencies' minimum versions to cut cruft, and in general it's an essential part
88of the maintenance process. But as a general rule, existing dependencies should not be bumped without strong
ea7ded75
LB
89reasons. When possible, we try to keep compatibility with the most recent LTS releases of each mainstream distribution
90for optional components, and with all currently maintained (i.e.: not EOL) LTS releases for core components. When in
91doubt, ask before committing time to work on contributions if it's not clear that cutting support would be obviously
92acceptable.
93
94## Kernel Requirements
95
96Same principles as with other dependencies should be applied. It is fine to require newer kernel versions for additional
97functionality or optional features, but very strong reasons should be required for breaking compatibility for existing
98functionality, especially for core components. It is not uncommon, for example, for embedded systems to be stuck on older
99kernel versions due to hardware requirements, so do not assume everybody is running with latest and greatest at all times.
100In general, [currently maintained LTS branches](https://www.kernel.org/category/releases.html) should keep being supported
868e6ce6 101for existing functionality.
ea7ded75
LB
102
103## `libsystemd.so`
104
868e6ce6 105`libsystemd.so` is a shared public library, so breaking ABI/API compatibility would create lot of work for everyone, and is not allowed. Instead, always add a new interface instead of modifying
ea7ded75 106the signature of an existing function. It is fine to mark an interface as deprecated to gently nudge users toward a newer one,
868e6ce6 107but support for the old one must be maintained.
ea7ded75
LB
108Symbol versioning and the compiler's deprecated attribute should be used when managing the lifetime of a public interface.
109
110## `libudev.so`
111
112`libudev.so` is a shared public library, and is still maintained, but should not gain new symbols at this point.