Skip to content

Is it time for "PowerShell vZeroTechnicalDebt" ("vNext") and/or for an opt-in mechanism into new/fixed features that break backward compatibility? #6745

@mklement0

Description

@mklement0

Note that the term technical debt is used loosely here to mean "accumulated broken behavior that can't be fixed without breaking backward-compatibility"; strictly speaking the term has a different, specific meaning.


Update: @rjmholt has started a discussion about how to implement and manage breaking changes: #13129.


Note: This issue, which arose out of #5551 (comment), is just to get the discussion started to see if there's a fundamental willingness to entertain such changes. Eventually, RFC(s) are needed.

PowerShell's steadfast commitment to backward compatibility has served the community very well over the years.

On the flip side, the inevitable by-product was the accumulation of technical debt that requires memorizing exceptions and is a barrier to newcomers.

Certain fundamental problems that exist today can only be solved at the expense of backward compatibility, and there are two - not mutually exclusive - ways to handle that:

  • Implementation of a "PowerShell vZeroTechnicalDebt" edition that sheds all technical debt, but forfeits backward compatibility (possibly with future versions using semantic versioning to indicate compatibility)

  • Integration of backward-compatibility-breaking features / fixes into the existing code base, available strictly on an opt-in basis only.

Which approaches, if any, are we willing to consider?
Once we have clarity on that, we can flesh out the processes.

Here are some of the existing fundamental problems that can only be solved at the expense of backward compatibility; I'm sure others will think of more:

Environment data

Written as of:

PowerShell Core v6.0.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    Issue-Metaan issue used to track multiple issuesResolution-No ActivityIssue has had no activity for 6 months or more

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions