@@ -16,7 +16,7 @@ developing RDFLib code.
16
16
* You must supply tests for new code.
17
17
* RDFLib uses `Poetry <https://python-poetry.org/docs/master/ >`_ for dependency management and packaging.
18
18
19
- If you add a new cool feature, consider also adding an example in ``./examples ``
19
+ If you add a new cool feature, consider also adding an example in ``./examples ``.
20
20
21
21
Pull Requests Guidelines
22
22
------------------------
@@ -71,6 +71,87 @@ the users of this project.
71
71
Please note that while we would like all PRs to follow the guidelines given
72
72
here, we will not reject a PR just because it does not.
73
73
74
+ Maintenance Guidelines
75
+ ----------------------
76
+
77
+ This section contains guidelines for maintaining RDFLib. RDFLib maintainers
78
+ should try to follow these. These guidelines also serve as an indication to
79
+ RDFLib users what they can expect.
80
+
81
+ Breaking changes
82
+ ~~~~~~~~~~~~~~~~
83
+
84
+ Breaking changes to RDFLib's public API should be made incrementally, with small
85
+ pull requests to the main branch that change as few things as possible.
86
+
87
+ Breaking changes should be discussed first in an issue before work is started,
88
+ as it is possible that the change is not necessary or that there is a better way
89
+ to achieve the same goal, in which case the work on the PR would have been
90
+ wasted. This will however not be strictly enforced, and no PR will be rejected
91
+ solely on the basis that it was not discussed upfront.
92
+
93
+ RDFLib follows `semantic versioning <https://semver.org/spec/v2.0.0.html >`_ and `trunk-based development
94
+ <https://trunkbaseddevelopment.com/> `_, so if any breaking changes were
95
+ introduced into the main branch since the last release, then the next release
96
+ will be a major release with an incremented major version.
97
+
98
+ Releases of RDFLib will not as a rule be conditioned on specific features, so
99
+ there may be new major releases that contain very few breaking changes, and
100
+ there could be no minor or patch releases between two major releases.
101
+
102
+ .. _breaking_changes_rationale :
103
+
104
+ Rationale
105
+ ^^^^^^^^^
106
+
107
+ RDFLib has been around for more than a decade, and in this time both Python and
108
+ RDF have evolved, and RDFLib's API also has to evolve to keep up with these
109
+ changes and to make it easier for users to use. This will inevitably require
110
+ breaking changes.
111
+
112
+ There are more or less two ways to introduce breaking changes to RDFLib's public
113
+ API:
114
+
115
+ - Revolutionary: Create a new API from scratch and reimplement it, and when
116
+ ready, release a new version of RDFLib with the new API.
117
+ - Evolutionary: Incrementally improve the existing API with small changes and
118
+ release any breaking changes that were made at regular intervals.
119
+
120
+ While the revolutionary approach seems appealing, it is also risky and
121
+ time-consuming.
122
+
123
+ The evolutionary approach puts a lot of strain on the users of RDFLib as they
124
+ have to adapt to breaking changes more often, but the shortcomings of the RDFLib
125
+ public API also put a lot of strain on the users of RDFLib. On the other hand, a
126
+ major advantage of the evolutionary approach is that it is simple and achievable
127
+ from a maintenance and contributor perspective.
128
+
129
+ Deprecating functionality
130
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
131
+
132
+ To whatever extent possible, classes, functions, variables, or parameters that
133
+ will be removed should be marked for deprecation in documentation, and if
134
+ possible, should be changed to raise deprecation warnings if used.
135
+
136
+ There is however no hard requirement that something may only be removed after a
137
+ deprecation notice has been added, or only after a release was made with a
138
+ deprecation notice.
139
+
140
+ Consequently, functionality may be removed without it ever being marked as
141
+ deprecated.
142
+
143
+ .. _deprecation_rationale :
144
+
145
+ Rationale
146
+ ^^^^^^^^^
147
+
148
+ Current resource limitations and the backlog of issues make it impractical to
149
+ first release or incorporate deprecation notices before making quality of life
150
+ changes.
151
+
152
+ RDFLib uses semantic versioning and provides type hints, and these are the
153
+ primary mechanisms for signalling breaking changes to our users.
154
+
74
155
.. _tests :
75
156
76
157
Tests
0 commit comments