| Platform Support Policy | 
 | ======================= | 
 |  | 
 | Git has a history of providing broad "support" for exotic platforms and older | 
 | platforms, without an explicit commitment. Stakeholders of these platforms may | 
 | want a more predictable support commitment. This is only possible when platform | 
 | stakeholders supply Git developers with adequate tooling, so we can test for | 
 | compatibility or develop workarounds for platform-specific quirks on our own. | 
 | Various levels of platform-specific tooling will allow us to make more solid | 
 | commitments around Git's compatibility with that platform. | 
 |  | 
 | Note that this document is about maintaining existing support for a platform | 
 | that has generally worked in the past; for adding support to a platform which | 
 | doesn't generally work with Git, the stakeholders for that platform are expected | 
 | to do the bulk of that work themselves. We will consider such patches if they | 
 | don't make life harder for other supported platforms or for Git contributors. | 
 | Some contributors may volunteer to help with the initial or continued support, | 
 | but that's not a given. Support work which is too intrusive or difficult for the | 
 | project to maintain may still not be accepted. | 
 |  | 
 | Minimum Requirements | 
 | -------------------- | 
 |  | 
 | The rest of this doc describes best practices for platforms to make themselves | 
 | easy to support. However, before considering support at all, platforms need to | 
 | meet the following minimum requirements: | 
 |  | 
 | * Has C99 or C11 | 
 |  | 
 | * Uses versions of dependencies which are generally accepted as stable and | 
 |   supportable, e.g., in line with the version used by other long-term-support | 
 |   distributions | 
 |  | 
 | * Has active security support (taking security releases of dependencies, etc) | 
 |  | 
 | These requirements are a starting point, and not sufficient on their own for the | 
 | Git community to be enthusiastic about supporting your platform. Maintainers of | 
 | platforms which do meet these requirements can follow the steps below to make it | 
 | more likely that Git updates will respect the platform's needs. | 
 |  | 
 | Compatible by next release | 
 | -------------------------- | 
 |  | 
 | To increase probability that compatibility issues introduced in a release | 
 | will be fixed in a later release: | 
 |  | 
 | * You should send a bug report as soon as you notice the breakage on your | 
 |   platform. The sooner you notice, the better; watching `seen` means you can | 
 |   notice problems before they are considered "done with review"; whereas | 
 |   watching `master` means the stable branch could break for your platform, but | 
 |   you have a decent chance of avoiding a tagged release breaking you. See "The | 
 |   Policy" in link:../howto/maintain-git.html["How to maintain Git"] for an | 
 |   overview of which branches are used in the Git project, and how. | 
 |  | 
 | * The bug report should include information about what platform you are using. | 
 |  | 
 | * You should also use linkgit:git-bisect[1] and determine which commit | 
 |   introduced the breakage. | 
 |  | 
 | * Please include any information you have about the nature of the breakage: is | 
 |   it a memory alignment issue? Is an underlying library missing or broken for | 
 |   your platform? Is there some quirk about your platform which means typical | 
 |   practices (like malloc) behave strangely? | 
 |  | 
 | * If possible, build Git from the exact same source both for your platform and | 
 |   for a mainstream platform, to see if the problem you noticed appears only | 
 |   on your platform. If the problem appears in both, then it's not a | 
 |   compatibility issue, but we of course appreciate hearing about it in a bug | 
 |   report anyway, to benefit users of every platform. If it appears only on your | 
 |   platform, mention clearly that it is a compatibility issue in your report. | 
 |  | 
 | * Once we begin to fix the issue, please work closely with the contributor | 
 |   working on it to test the proposed fix against your platform. | 
 |  | 
 | Example: NonStop | 
 | https://lore.kernel.org/git/01bd01da681a$b8d70a70$2a851f50$@nexbridge.com/[reports | 
 | problems] when they're noticed. | 
 |  | 
 | Compatible on `master` and releases | 
 | ----------------------------------- | 
 |  | 
 | To make sure all stable builds and regular releases work for your platform the | 
 | first time, help us avoid breaking `master` for your platform: | 
 |  | 
 | * You should run regular tests against the `next` branch and | 
 |   publish breakage reports to the mailing list immediately when they happen. | 
 |  | 
 | ** Ideally, these tests should run daily. They must run more often than | 
 |    weekly, as topics generally spend at least 7 days in `next` before graduating | 
 |    to `master`, and it takes time to put the brakes on a patch once it lands in | 
 |    `next`. | 
 |  | 
 | ** You may want to ask to join the mailto:git-security@googlegroups.com[security | 
 |    mailing list] in order to run tests against the fixes proposed there, too. | 
 |  | 
 | * It may make sense to automate these; if you do, make sure they are not noisy | 
 |   (you don't need to send a report when everything works, only when something | 
 |   breaks; you don't need to send repeated reports for the same breakage night | 
 |   after night). | 
 |  | 
 | * Breakage reports should be actionable - include clear error messages that can | 
 |   help developers who may not have access to test directly on your platform. | 
 |  | 
 | * You should use git-bisect and determine which commit introduced the breakage; | 
 |   if you can't do this with automation, you should do this yourself manually as | 
 |   soon as you notice a breakage report was sent. | 
 |  | 
 | * You should either: | 
 |  | 
 | ** Provide on-demand access to your platform to a trusted developer working to | 
 |    fix the issue, so they can test their fix, OR | 
 |  | 
 | ** Work closely with the developer fixing the issue; the turnaround to check | 
 |    that their proposed fix works for your platform should be fast enough that it | 
 |    doesn't hinder the developer working on that fix. Slow testing turnarounds | 
 |    may cause the fix to miss the next release, or the developer may lose | 
 |    interest in working on the fix at all. | 
 |  | 
 | Example: | 
 | https://lore.kernel.org/git/CAHd-oW6X4cwD_yLNFONPnXXUAFPxgDoccv2SOdpeLrqmHCJB4Q@mail.gmail.com/[AIX] | 
 | provides a build farm and runs tests against release candidates. | 
 |  | 
 | Compatible on `next` | 
 | -------------------- | 
 |  | 
 | To avoid reactive debugging and fixing when changes hit a release or stable, you | 
 | can aim to ensure `next` always works for your platform. (See "The Policy" in | 
 | link:../howto/maintain-git.html["How to maintain Git"] for an overview of how | 
 | `next` is used in the Git project.) To do that: | 
 |  | 
 | * You should add a runner for your platform to the GitHub Actions or GitLab CI | 
 |   suite.  This suite is run when any Git developer proposes a new patch, and | 
 |   having a runner for your platform/configuration means every developer will | 
 |   know if they break you, immediately. | 
 |  | 
 | ** If adding it to an existing CI suite is infeasible (due to architecture | 
 |    constraints or for performance reasons), any other method which runs as | 
 |    automatically and quickly as possible works, too. For example, a service | 
 |    which snoops on the mailing list and automatically runs tests on new [PATCH] | 
 |    emails, replying to the author with the results, would also be within the | 
 |    spirit of this requirement. | 
 |  | 
 | * If you rely on Git avoiding a specific pattern that doesn't work well with | 
 |   your platform (like a certain malloc pattern), raise it on the mailing list. | 
 |   We'll work case-by-case to look for a solution that doesn't unnecessarily | 
 |   constrain other platforms to keep compatibility with yours. | 
 |  | 
 | * If you rely on some configuration or behavior, add a test for it. Untested | 
 |   behavior is subject to breakage at any time. | 
 |  | 
 | ** Clearly label these tests as necessary for platform compatibility. Add them | 
 |    to an isolated compatibility-related test suite, like a new t* file or unit | 
 |    test suite, so that they're easy to remove when compatibility is no longer | 
 |    required.  If the specific compatibility need is gated behind an issue with | 
 |    another project, link to documentation of that issue (like a bug or email | 
 |    thread) to make it easier to tell when that compatibility need goes away. | 
 |  | 
 | ** Include a comment with an expiration date for these tests no more than 1 year | 
 |    from now. You can update the expiration date if your platform still needs | 
 |    that assurance down the road, but we need to know you still care about that | 
 |    compatibility case and are working to make it unnecessary. | 
 |  | 
 | Example: We run our | 
 | https://git.kernel.org/pub/scm/git/git.git/tree/.github/workflows/main.yml[CI | 
 | suite] on Windows, Ubuntu, Mac, and others. | 
 |  | 
 | Getting help writing platform support patches | 
 | --------------------------------------------- | 
 |  | 
 | In general, when sending patches to fix platform support problems, follow | 
 | these guidelines to make sure the patch is reviewed with the appropriate level | 
 | of urgency: | 
 |  | 
 | * Clearly state in the commit message that you are fixing a platform breakage, | 
 |   and for which platform. | 
 |  | 
 | * Use the CI and test suite to ensure that the fix for your platform doesn't | 
 |   break other platforms. | 
 |  | 
 | * If possible, add a test ensuring this regression doesn't happen again. If | 
 |   it's not possible to add a test, explain why in the commit message. | 
 |  | 
 | Platform Maintainers | 
 | -------------------- | 
 |  | 
 | If you maintain a platform, or Git for that platform, and intend to work with | 
 | the Git project to ensure compatibility, please send a patch to add yourself to | 
 | this list. | 
 |  | 
 | NonStop: Randall S. Becker <rsbecker@nexbridge.com> |