|
| 1 | +# Meta |
| 2 | +[meta]: #meta |
| 3 | +- Name: Deprecate and Remove Windows Support in Binary Buildpack |
| 4 | +- Start Date: 2025-01-15 |
| 5 | +- Author(s): @tnikolova82, @ivanovac, @beyhan |
| 6 | +- Status: Draft <!-- Acceptable values: Draft, Approved, On Hold, Superseded --> |
| 7 | +- RFC Pull Request: (fill in with PR link after you submit it) |
| 8 | +- Related RFCs: [RFC-0050 Java Buildpack Migration to Golang](https://github.com/cloudfoundry/community/blob/main/toc/rfc/rfc-0050-java-buildpack-migration-to-golang.md) |
| 9 | + |
| 10 | +## Summary |
| 11 | + |
| 12 | +Deprecate and immediately remove Windows support from the Cloud Foundry Binary Buildpack. [`v1.1.21`](https://github.com/cloudfoundry/binary-buildpack-release/releases/tag/v1.1.21) will be the last release shipping Windows support. The next release will be Linux-only. |
| 13 | + |
| 14 | +## Problem |
| 15 | + |
| 16 | +- The Windows support in the Binary Buildpack is effectively unmaintained following the departure of its core maintainer from the CF community. |
| 17 | +- It is one of the only buildpacks (alongside [`hwc-buildpack`](https://github.com/cloudfoundry/hwc-buildpack)) supporting Windows, and the current maintainers have no Windows experience to support this use case. |
| 18 | +- No one has stepped up to maintain the Windows portion despite calls for help. |
| 19 | +- Shipping a Windows binary that maintainers cannot audit, patch, or verify is a risk that should not be prolonged. |
| 20 | + |
| 21 | +## What is being deprecated |
| 22 | + |
| 23 | +The Binary Buildpack's Windows support enables deploying pre-compiled Windows executables (e.g. `.exe`, `.bat` entrypoints) to Cloud Foundry Windows Diego cells. Concretely, the following pieces are being removed: |
| 24 | + |
| 25 | +- The `binary-buildpack-windows` package: the BOSH release currently ships two packages — a Linux-compiled buildpack binary and a separate Windows-compiled buildpack binary. When CF schedules an app onto a Windows cell, the Windows variant is used as the buildpack runtime to detect, supply, and launch the app's binary. Only the Linux package will remain. |
| 26 | +- The `windows` stack entry in `binary-buildpack-release`'s `manifest.yml` and the corresponding job/packaging specs that wire the Windows package into the BOSH release. |
| 27 | +- Windows-specific buildpack code in [`binary-buildpack`](https://github.com/cloudfoundry/binary-buildpack), including: |
| 28 | + - Files guarded by `//go:build windows` build tags (e.g. Windows-specific `finalize`/`supply` and launcher logic). |
| 29 | + - Handling for Windows-style start commands and executable extensions (`.exe`, `.bat`). |
| 30 | + - Windows-targeted packaging scripts and any `GOOS=windows` cross-compilation in build tooling. |
| 31 | +- Windows CI: GitHub Actions / Concourse jobs that cross-compile, unit test, and integration-test the buildpack against Windows cells (including any `cflinuxfs*` ↔ `windows*` matrix entries). |
| 32 | +- Windows integration test fixtures: sample apps containing Windows binaries used to validate end-to-end staging and running on Windows cells. |
| 33 | + |
| 34 | +After removal, the buildpack will only detect and stage apps targeting Linux stacks (e.g. `cflinuxfs4`). Operators with Windows workloads that ship plain executables will need to pin to `v1.1.21` or fork. |
| 35 | + |
| 36 | +## Proposal |
| 37 | + |
| 38 | +- Designate [`v1.1.21`](https://github.com/cloudfoundry/binary-buildpack-release/releases/tag/v1.1.21) as the final release with Windows support. It will receive no further updates, including security patches, for the Windows stack. |
| 39 | +- Immediately (no transition period) remove all Windows-specific code, CI, and packaging from [`binary-buildpack`](https://github.com/cloudfoundry/binary-buildpack) and `binary-buildpack-release`, and cut a Linux-only `v2.0.0`. |
| 40 | +- Add deprecation notices to repos' `README.md`, CF documentation, and announce on `#buildpacks` Slack. |
| 41 | +- Affected users may pin to `v1.1.21` or self-maintain a fork. |
| 42 | +## Rationale and Alternatives |
| 43 | + |
| 44 | +- Why immediate removal (no 6-month transition)? |
| 45 | + - The Windows code path is already de-facto unmaintained and a transition period changes nothing operationally, since no fixes are being produced anyway. |
| 46 | + - Continuing to publish Windows artifacts during a grace period creates a false impression of support and prolongs security risk. |
| 47 | + - `v1.1.21` remains available for any operator who needs to keep using Windows, where pinning is a one-line change. |
| 48 | +- Sustainability & security: maintainers cannot credibly support a platform they have no expertise on. Additionally, an explicitly removed path is safer than a quietly unmaintained one. |
| 49 | +- Alternatives considered: |
| 50 | + - Find new maintainers — attempted, none came forward. |
| 51 | + - Do nothing — leaves users without patches or clarity. |
| 52 | + |
| 53 | +## Implementation |
| 54 | + |
| 55 | +1. Announce deprecation and removal. |
| 56 | +2. Strip all Windows-specific code. |
| 57 | +4. Cut a Linux-only `v2.0.0` of `binary-buildpack-release`. |
| 58 | +5. Update CF documentation to reference `v1.1.21` as the last Windows-supporting release. |
| 59 | + |
0 commit comments