|
| 1 | +# Change Management and Deprecation Cycles |
| 2 | + |
| 3 | +> ποταμοῖσι τοῖσιν αὐτοῖσιν ἐμβαίνουσιν ἕτερα καὶ ἕτερα ὕδατα ἐπιρρεῖ |
| 4 | +> (Upon those who step into the same stream ever different waters flow) |
| 5 | +> |
| 6 | +> ~ Heraclitus |
| 7 | +
|
| 8 | +!!! info |
| 9 | + |
| 10 | + **TL;DR: Change happens.** |
| 11 | + |
| 12 | + Sometimes such change is a breaking change. Sometimes such change means |
| 13 | + retiring capabilities. |
| 14 | + |
| 15 | + **This document explains how we're going to manage change carefully, |
| 16 | + collaboratively and compassionately.** |
| 17 | + |
| 18 | +All code changes. |
| 19 | + |
| 20 | +To ensure PyScript changes are smooth, dependable and well advertised within |
| 21 | +our community of users, this document outlines our approach in two areas: |
| 22 | + |
| 23 | +1. Changes and additions to our codebase. |
| 24 | +2. Deprecation of existing features as they are replaced or become redundant. |
| 25 | + |
| 26 | +Ultimately, and out of necessity as a web-based project, our aim is for a |
| 27 | +small, neat, and comprehensible code base, created through engagement with our |
| 28 | +community. |
| 29 | + |
| 30 | +Each release of PyScript is given a [calver](https://calver.org/) release |
| 31 | +number so folks using PyScript can immediately see how up-to-date their |
| 32 | +referenced PyScript is. For example, release number `2024-10-2` is the second |
| 33 | +release made in October, 2024. |
| 34 | + |
| 35 | +Furthermore, **calver allows users to pin the version of PyScript used in their |
| 36 | +project to a specific version**. Since a release never changes once released, |
| 37 | +users can be confident PyScript won't shift from under them. |
| 38 | + |
| 39 | +**We recommend developers using PyScript keep the version of PyScript they are |
| 40 | +using up to date**. To ensure this process is smooth, this document was |
| 41 | +created to describe what you can expect from us. |
| 42 | + |
| 43 | +## Change |
| 44 | + |
| 45 | +The source of change in PyScript comes from three places: |
| 46 | + |
| 47 | +1. The community - who need change in order to work more effectively. |
| 48 | +2. The core developers - who know the code, and want it to be well maintained. |
| 49 | +3. The tech world - who update web standards, grow WASM and bring new features. |
| 50 | + |
| 51 | +Taking each in turn, here's how such changes ought to take place (although we |
| 52 | +want to acknowledge this may not always be possible due to context). |
| 53 | + |
| 54 | +### The Community |
| 55 | + |
| 56 | +The community of coders who create with PyScript are our primary concern. We |
| 57 | +are a diverse community who include folks with many different, and sometimes |
| 58 | +conflicting, technical needs. So PyScript best reflects these needs, we invite |
| 59 | +our community to engage with us as we shape PyScript's future. |
| 60 | + |
| 61 | +* Informal technical discussion happens over on our |
| 62 | + [discord server](https://discord.gg/HxvBtukrg2). |
| 63 | +* We have |
| 64 | + [weekly technical community calls](https://discord.gg/CxkMkSa3Zk?event=1303877626154323968) |
| 65 | + on our discord server, and you can find recordings of these calls over on |
| 66 | + [our YouTube channel](https://www.youtube.com/@PyScriptTV). |
| 67 | +* If you have a proposal for a change, |
| 68 | + [start a discussion over on GitHub](https://github.com/pyscript/pyscript/discussions) |
| 69 | + or [submit an issue/bug report](https://github.com/pyscript/pyscript/issues). |
| 70 | +* If, after discussion and consensus has been agreed with the core developers, |
| 71 | + you find yourself creating code, please submit a pull request by following |
| 72 | + the information in our [developer guide](../developers). |
| 73 | +* Finally, we expect everyone to act in the spirit of our |
| 74 | + [code of conduct](../conduct/). |
| 75 | + |
| 76 | +Sometimes there will be conflicting needs or opinions. We welcome constructive |
| 77 | +criticism, compassionate argument and pragmatic analysis. However, our core aim |
| 78 | +is to find a consensus, and this will inevitably require compromise, |
| 79 | +humbleness, and patience. Often such consensus will not please anyone since |
| 80 | +nobody gets exactly what they want. But in such a situation, by ensuring our |
| 81 | +debate and community engagement is done in public, we will (at least) have a |
| 82 | +record of how we arrived at such a consensus. |
| 83 | + |
| 84 | +### The Developers |
| 85 | + |
| 86 | +The core developers of PyScript often need to refactor or change code to ensure |
| 87 | +PyScript remains a high quality open source project. To this end, our changes |
| 88 | +will be: |
| 89 | + |
| 90 | +* Proposed via a discussion on GitHub, or debated in the community call, |
| 91 | + or described on discord (or a mixture of all three). Our intention is to do |
| 92 | + all our work in the open and with the full engagement of the community. |
| 93 | +* Delivered via a pull request, reviewed in public. The community is invited to |
| 94 | + be a part of this review process (subscribe to these updates |
| 95 | + via your GitHub account). |
| 96 | +* Described in our docs and release notes. |
| 97 | + |
| 98 | +We, as core maintainers, welcome constructive feedback about our processes. |
| 99 | + |
| 100 | +### External Tech |
| 101 | + |
| 102 | +The universe is always changing and PyScript needs to change with it. These |
| 103 | +changes happen in three ways: |
| 104 | + |
| 105 | +* **Dependencies**. The Python interpreters, upon which we depend, are active |
| 106 | + open source projects who also make new releases. The core maintainers of |
| 107 | + PyScript have excellent relationships with these upstream projects and we |
| 108 | + will endeavour to ensure the latest changes appear in PyScript as soon as |
| 109 | + possible, |
| 110 | +* **Security**. Inevitably some code we depend upon, or perhaps even |
| 111 | + in PyScript itself, will encounter a security related problem. **PyScript |
| 112 | + takes such problems very seriously** and will take all the necessary steps to |
| 113 | + ensure security related changes are timely, well documented and taken with |
| 114 | + the greatest of care and attention. |
| 115 | +* **Standards**. PyScript's parents are Python and the web. PyScript is itself |
| 116 | + facilitated by web-assembly (WASM). All of these technical worlds rely on |
| 117 | + standards to ensure compatibility. Such standards are evolving and changing |
| 118 | + all the time and we (PyScript core developers) are actively involved in such |
| 119 | + developments and will endeavour to ensure PyScript, when appropriate, is |
| 120 | + updated to the latest versions of these standards. |
| 121 | + |
| 122 | +## Deprecation |
| 123 | + |
| 124 | +Sometimes we need to make breaking changes: |
| 125 | + |
| 126 | +* A new feature supercedes an old one. |
| 127 | +* An initial implementation of an API requires improvement. |
| 128 | +* A feature is no longer used and requires removal to save space / complexity. |
| 129 | + |
| 130 | +Breaking changes can cause disruption. Therefore we will be very careful when |
| 131 | +making such changes. Of primary importance are communication and |
| 132 | +predictability. |
| 133 | + |
| 134 | +### Communication |
| 135 | + |
| 136 | +Any breaking changes will be arrived at via the processes described in the |
| 137 | +[Change](#change) section. |
| 138 | + |
| 139 | +Since these will be done in public and with community engagement we hope the |
| 140 | +initial decision for a breaking change will come as no surprise. Furthermore, |
| 141 | +as the change is implemented there will be further opportunities for the change |
| 142 | +to be broadcast: via updates in our community call, via our upcoming PyScript |
| 143 | +newsletter, and in the formal technical discussions that take place on GitHub. |
| 144 | + |
| 145 | +### Predictability |
| 146 | + |
| 147 | +The release of a breaking change follows this process: |
| 148 | + |
| 149 | +* After the initial communication of the change, the release of PyScript that |
| 150 | + immediately follows the decision will ensure the affected API reports the |
| 151 | + upcoming changes via a warning in the browser console. |
| 152 | +* The documentation will also be updated to reflect the upcoming changes to the |
| 153 | + API. |
| 154 | +* The release notes immediately following the implementation of the |
| 155 | + breaking change will include a clear indication that the breaking change has |
| 156 | + landed. |
| 157 | +* The documentation, immediately following the implementation of the breaking |
| 158 | + change, will include a warning to indicate how the new update is different |
| 159 | + from the old, and will remove the references to the old API. |
| 160 | +* In the following releases the warning about the arrival of the new breaking |
| 161 | + change will be removed. |
| 162 | + |
| 163 | +## Feedback |
| 164 | + |
| 165 | +This document is a work in progress. Please feel free to offer feedback via |
| 166 | +[the GitHub project for our documentation](https://github.com/pyscript/docs). |
| 167 | + |
| 168 | +Thank you! |
0 commit comments