Skip to content

Clarify .NET guidelines: distinguish source-breaking vs binary-breaking changes#9687

Open
ronniegeraghty wants to merge 6 commits intoAzure:mainfrom
ronniegeraghty:squad/9517-source-breaking-change-guidelines
Open

Clarify .NET guidelines: distinguish source-breaking vs binary-breaking changes#9687
ronniegeraghty wants to merge 6 commits intoAzure:mainfrom
ronniegeraghty:squad/9517-source-breaking-change-guidelines

Conversation

@ronniegeraghty
Copy link
Member

Summary

This PR refines the Azure SDK .NET guidelines to explicitly distinguish between binary-breaking changes (never allowed in minor/patch releases) and source-breaking changes (permitted in minor releases under specific conditions with Architecture Board approval).

Problem

The current guidelines state libraries must "be 100% backwards compatible," which implies all breaking changes are prohibited. In practice, the team already makes source-breaking changes (e.g., Azure.Storage.Blobs 12.24.0 → 12.25.0) and considers them acceptable when binary compatibility is preserved. The guidelines need to reflect this reality.

Changes

File Change
docs/dotnet/introduction.md Replace blanket backwards-compat rule with separate MUST NOT (binary) and MAY (source) rules; add "Acceptable Source-Breaking Changes" subsection with conditions checklist and C# options-bag migration example
docs/general/compatibility.md Add "Source vs. Binary Compatibility" subsection under API Changes defining both terms
docs/policies/releasenotes.md Add "Source-Breaking Changes" section requiring documentation under Breaking Changes heading with migration guidance

Conditions for Acceptable Source-Breaking Changes

  1. Binary compatibility is preserved
  2. Migration path is straightforward (mechanical, follows compiler errors)
  3. Documented in release notes with migration guidance
  4. Approved by Architecture Board

References

Refine the .NET SDK guidelines to explicitly distinguish between binary-breaking
changes (never allowed in minor/patch) and source-breaking changes (permitted in
minor releases under specific conditions). This addresses the ambiguity in the
current '100% backwards compatible' language.

Changes:
- docs/dotnet/introduction.md: Replace blanket backwards-compat rule with
  separate MUST NOT (binary) and MAY (source) rules; add 'Acceptable
  Source-Breaking Changes' subsection with conditions and C# code example
- docs/general/compatibility.md: Add 'Source vs. Binary Compatibility'
  subsection under API Changes
- docs/policies/releasenotes.md: Add 'Source-Breaking Changes' section
  requiring documentation in release notes

Fixes Azure#9517

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the Azure SDK documentation to clarify that .NET binary-breaking changes are disallowed in minor/patch releases, while certain source-breaking changes may be acceptable in minor releases with defined conditions and Architecture Board approval.

Changes:

  • Add guidance in .NET versioning docs distinguishing binary-breaking vs. source-breaking changes, including an “acceptable source-breaking changes” checklist and example.
  • Add a general “Source vs. Binary Compatibility” subsection to the cross-language compatibility guidelines.
  • Add a release-notes policy section requiring source-breaking changes to be documented under “Breaking Changes” with migration guidance.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

File Description
docs/policies/releasenotes.md Adds a policy section for documenting source-breaking changes in release notes.
docs/general/compatibility.md Defines source vs. binary compatibility terminology at the general guidelines level.
docs/dotnet/introduction.md Refines .NET versioning rules to separate binary-breaking vs. source-breaking guidance and adds an example.

ronniegeraghty and others added 3 commits March 2, 2026 18:23
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
- Remove 'new major version' option from binary-breaking guidance per
  christothes feedback that binary-breaking changes should never happen
  in existing packages (creating a new package is not a breaking change)
- Strengthen wording from 'should happen rarely, if ever' to 'should
  never be introduced in an existing package'
- This also resolves the copilot reviewer's concern about contradictory
  guidance between 'major version or new package' and the MUST requirement
  for new packages only

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…tions

- Define three types of breaking changes: API-breaking, binary-breaking, and source-breaking
- Add 'No API-breaking changes' as first condition for acceptable source-breaking changes
- Addresses feedback from KrzysztofCwalina in PR review

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

.NET guidelines should clarify how source breaking changes can be made

5 participants