summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Enge <andreas@enge.fr>2026-05-05 18:11:51 +0200
committerAndreas Enge <andreas@enge.fr>2026-06-05 09:44:43 +0200
commita591df482f2d7e226566a419649fdf8d4333a4d1 (patch)
treee9743c1f506e4fef67e1b718d105f0be9671daa7
parentdc38db3c2d9775a04fcc12008d7ac1ca00269335 (diff)
doc: Transcribe GCD 006.
* doc/contributing.texi (Deprecation Policy): Update according to GCD 006. Change-Id: If48d74c8ed94f5040d842de03150a3ee673f841d
-rw-r--r--doc/contributing.texi105
1 files changed, 74 insertions, 31 deletions
diff --git a/doc/contributing.texi b/doc/contributing.texi
index 6ad271cf432..0da29d4c68b 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -3216,7 +3216,10 @@ user survey before enacting a plan.
3216@cindex package deprecation 3216@cindex package deprecation
3217@item Package name changes 3217@item Package name changes
3218When a package name changes, it must remain available under its old name 3218When a package name changes, it must remain available under its old name
3219for @b{at least one year}. For example, @code{go-ipfs} was renamed to 3219for @b{at least six months}; the deprecation date should be stated in
3220a comment in the code to ease the final removal.
3221
3222For example, @code{go-ipfs} was renamed to
3220@code{kubo} following a decision made upstream; to communicate the name 3223@code{kubo} following a decision made upstream; to communicate the name
3221change to users, the package module provided this definition: 3224change to users, the package module provided this definition:
3222 3225
@@ -3240,44 +3243,84 @@ package name as deprecated.
3240@cindex package removal policy 3243@cindex package removal policy
3241@anchor{package-removal-policy} 3244@anchor{package-removal-policy}
3242@item Package removal 3245@item Package removal
3243Packages whose upstream developers have declared as having reached ``end
3244of life'' or being unmaintained may be removed; likewise, packages that
3245have been @b{failing to build for two months or more} may be removed.
3246 3246
3247There is no formal deprecation mechanism for this case, unless a 3247How packages may be removed depends on their build status and on their
3248replacement exists, in which case the @code{define-deprecated-package} 3248position in the package graph.
3249macro mentioned above can be used. 3249@itemize
3250@item Removal of packages that do not build
3251
3252A package that does not build becomes a removal candidate immediately.
3253A pull request removing such a package should be filed on Codeberg
3254with the @samp{deprecation} label. Additional justification for the
3255(non-)importance, obsolescence etc. of the package is welcome, but not
3256required.
3257Such a pull request may be merged @b{at least three weeks} later if there
3258is no opposition to the removal or if nobody has volunteered to repair the
3259affected packages.
3260
3261@item Removal of building packages
3262
3263There are various reasons why packages may become removal candidates
3264although they still build: For instance we may have a newer version of
3265the same package in Guix, maintenance has stopped upstream, or the package
3266is not adequately maintained in Guix.
3267
3268@table @asis
3269@item
3270Removal candidates that are building leaf packages
3271
3272Leaf packages may be removed following the above process, assuming that
3273there is no opposition to the removal or that consensus for the removal
3274has been reached.
3275Leaf packages that are typically installed into user profiles (for
3276instance applications, but also packages used in a service) should
3277not be removed unless there are particularly good reasons, such as
3278security implications.
3279
3280@item
3281Removal candidates that are building packages with dependents
3282
3283Removing building packages on which other packages depend causes more
3284disruption than removing leaf packages, since at the same time all
3285dependent packages need to be removed. This may still be desirable for
3286overarching reasons. For instance, we want to remove older versions of
3287packages for which newer versions are already packaged, remove packages
3288that are unmaintained or have reached end of life upstream, or that suffer
3289from security vulnerabilities.
3290
3291In this case, the removal candidate may be removed together with all
3292packages depending on it following the above procedure. If the removal
3293candidate falls into the realm of a team, this team must be notified,
3294and consensus shall be sought about the removal in particular with this
3295team. Reasonable efforts shall be made beforehand to update or otherwise
3296preserve dependent packages.
3250 3297
3251If the package being removed is a ``leaf'' (no other packages depend on 3298@end table
3252it), it may be removed after a @b{one-month review period} of the patch 3299@end itemize
3253removing it (this applies even when the removal has additional
3254motivations such as security problems affecting the package).
3255 3300
3256@quotation Note 3301@quotation Note
3257Learn about pending package removals by checking 3302Learn about pending package removals by checking
3258@uref{https://codeberg.org/guix/guix/issues?labels=445131, issues and 3303@uref{https://codeberg.org/guix/guix/pulls?labels=445131,
3259pull requests with the @samp{deprecation} label}. 3304pull requests with the @samp{deprecation} label}.
3260@end quotation 3305@end quotation
3261 3306
3262If the package has many dependent packages---as is the case for example with 3307@item Moving packages between modules
3263Python version@tie{}2---the relevant team must propose a deprecation 3308
3264removal agenda and seek consensus with other packagers for @b{at least 3309When a package is moved from one module to another one, the corresponding
3265one month}. It may also invite feedback from the broader user 3310variable @var{name} should be marked as deprecated in the old location
3266community, for example through a survey. Removal of all impacted 3311for @b{at least six months}, for instance by adding
3267packages may be gradual, spanning multiple months, to accommodate all 3312@findex define-deprecated/public-alias
3268use cases. 3313@lisp
3269 3314(define-deprecated/public-alias @var{name}
3270When the package being removed is considered popular, whether or not it 3315 (@@ (gnu packages @var{new-module} @var{name}))
3271is a leaf, its deprecation must be announced as an entry in 3316@end lisp
3272@code{etc/news.scm}. 3317in @var{gnu/packages/old-module.scm}.
3273 3318
3274@item Package upgrade 3319@item Package additions
3275In the case of packages with many dependents and/or many users, an 3320
3276upgrade may be treated like the @emph{removal} of the previous version. 3321Packages submitted for inclusion must not fulfill the criteria to become
3277 3322a removal candidate immediately after addition.
3278Examples include major version upgrades of programming language 3323
3279implementations, as we've seen above with Python, and major upgrades of
3280``big'' libraries such as Qt or GTK.
3281 3324
3282@cindex service deprecation 3325@cindex service deprecation
3283@item Services 3326@item Services