Les développeurs du projet Python ont proposé (PEP 594) de procéder à un nettoyage significatif de la bibliothèque standard. Il est suggéré de retirer de la bibliothèque standard de Python des fonctionnalités obsolètes, spécialisées, ainsi que des composants présentant des problèmes architecturaux qui ne peuvent pas être unifiés pour toutes les plateformes.
Par exemple, il est proposé d'exclure de la bibliothèque standard des modules tels que crypt (inaccessible pour Windows et dépendance des algorithmes de hachage sur les bibliothèques système), cgi (architecture non optimale, nécessitant le lancement d'un nouveau processus pour chaque requête), imp (il est recommandé d'utiliser importlib), pipes (il est recommandé d'utiliser le module subprocess), nis (il est recommandé d'utiliser NSS, LDAP ou Kerberos/GSSAPI), spwd (il n'est pas recommandé de travailler directement avec la base de données des comptes utilisateurs). Les modules binhex, uu, xdrlib,
aifc,
audioop,
chunk,
imghdr,
ossaudiodev,
sndhdr,
sunau,
asynchat,
asyncore,
cgitb,
smtpd,
nntplib, macpath,
formatter, msilib et parser.
Conformément au plan proposé, dans Python 3.8, les modules mentionnés ci-dessus devraient être marqués comme obsolètes, dans Python 3.8, des avertissements devraient être émis, et dans Python 3.10, de les retirer des dépôts CPython.
Le module parser est prévu pour être supprimé dans la version 3.9, car il a été marqué obsolète depuis la sortie de Python 2.5, et le module macpath dans la branche 3.8. Après la suppression des composants principaux, le code sera déplacé dans un dépôt séparé legacylib et son avenir dépendra de l'intérêt des membres de la communauté. Il est prévu que la branche Python 3.9 soit maintenue jusqu'en 2026, ce qui donnera suffisamment de temps pour migrer les projets vers des alternatives externes.
Initialement, des modules tels que ftplib, optparse, getopt, colorsys, fileinput, lib2to3 et wave étaient également proposés pour être supprimés, mais il a été décidé de les conserver dans la bibliothèque standard pour le moment, car ils sont largement utilisés et restent pertinents malgré l'existence d'alternatives plus avancées ou de l'attachement à des fonctionnalités spécifiques aux systèmes d'exploitation.
Rappelons que le projet Python utilise initialement l'approche « les batteries sont incluses », où une vaste gamme de fonctions est proposée dans la bibliothèque standard pour divers domaines d'application. Parmi les avantages de cette approche, on trouve la simplification de la maintenance des projets Python et le suivi de la sécurité des modules utilisés dans les projets. Les vulnérabilités des modules deviennent souvent une source de failles dans les applications qui les utilisent. Dans le cas où les fonctions font partie de la bibliothèque standard, il suffit de contrôler l'état du projet principal. En cas de division de la bibliothèque standard, les développeurs doivent utiliser des modules tiers, dont les vulnérabilités doivent être surveillées séparément. Une forte fragmentation et un grand nombre de dépendances augmentent le risque d'attaques par compromission de l'infrastructure des développeurs de modules.
D'autre part, chaque module supplémentaire dans la bibliothèque standard nécessite des ressources de l'équipe de développeurs Python pour la maintenance. La bibliothèque a accumulé de nombreuses fonctions redondantes et superflues, dont l'élimination pourrait réduire les coûts de maintenance. Au fur et à mesure que le catalogue évolue, et en simplifiant le processus d'installation et de téléchargement de modules supplémentaires, l'utilisation de modules externes est devenue aussi courante que celle des fonctions intégrées.
De plus en plus de développeurs utilisent des remplacements externes plus fonctionnels pour les modules standard, par exemple en utilisant le module lxml au lieu de xml. La suppression des modules abandonnés de la bibliothèque standard permettra d'accroître la popularité des alternatives en cours de développement par la communauté. De plus, la réduction de la bibliothèque standard entraînera une diminution de la taille de la distribution de base, ce qui est pertinent lors de l'utilisation de Python sur des plateformes intégrées avec un espace de stockage limité.
Source : opennet.ru
