Udviklerne af Python-projektet har fremsat et forslag (PEP 594) om at foretage en betydelig oprydning af standardbiblioteket. Det foreslås at fjerne både åbenlyst forældede og specialiserede funktioner fra Python's standardbibliotek samt komponenter med arkitekturproblemer, som ikke kan standardiseres på tværs af alle platforme.
For eksempel foreslås det at udelukke moduler som crypt (utilgængeligt for Windows og afhængighed af tilgængelighed af hash-algoritmer fra systembiblioteker), cgi (suboptimal arkitektur, kræver opstart af en ny proces for hver anmodning), imp (anbefalet at bruge importlib), pipes (anbefalet at bruge subprocess-modulet), nis (anbefalet at bruge NSS, LDAP eller Kerberos/GSSAPI), spwd (det anbefales ikke at arbejde direkte med konto-databaser). Også modulerne binhex, uu, xdrlib,
aifc,
audioop,
chunk,
imghdr,
ossaudiodev,
sndhdr,
sunau,
asynchat,
asyncore,
cgitb,
smtpd,
nntplib, macpath,
formatter, msilib og parser.
I henhold til den foreslåede plan er det meningen, at de ovennævnte moduler i Python 3.8 skal markeres som forældede, i Python 3.8 begynde at vise advarsler, og i Python 3.10 fjerne dem fra CPython-repositorierne.
Modulet parser planlægges at blive fjernet i version 3.9, da det allerede blev markeret som forældet i Python 2.5, og modulet macpath i version 3.8. Efter fjernelse fra den primære samling vil koden blive flyttet til et separat legacylib-repositorium, og dens fremtid vil afhænge af interessen fra fællesskabets medlemmer. Det forventes, at Python 3.9 vil blive understøttet indtil 2026, hvilket giver rigeligt tid til at migrere projekter til eksterne alternativer.
Oprindeligt blev det også foreslået at fjerne modulerne ftplib, optparse, getopt, colorsys, fileinput, lib2to3 og wave, men det blev besluttet midlertidigt at beholde dem i standardbiblioteket, da de er bredt anvendt og stadig relevante, på trods af tilgængeligheden af mere avancerede alternativer eller afhængigheder af specifikke operativsystemmuligheder.
Vi minder om, at Python-projektet oprindeligt anvender en tilgang, hvor "batterier inkluderet" er mottoet. Det vil sige, at der i standardbiblioteket tilbydes et omfattende udvalg af funktioner til forskellige anvendelsesområder. En fordel ved denne tilgang er, at det forenkler vedligeholdelsen af Python-projekter og sikringen af de anvendte moduler i disse projekter. Sårbarheder i moduler bliver ofte en kilde til sårbarheder i de programmer, som bruger dem. Hvis funktionerne er en del af standardbiblioteket, er det tilstrækkeligt at kontrollere tilstanden af det primære projekt. Ved opdeling af standardbiblioteket skal udviklerne anvende tredjepartsmoduler, hvor sårbarheder i hvert enkelt skal kontrolleres separat. Ved høj grad af fragmentering og et stort antal afhængigheder opstår truslen om angreb gennem kompromittering af udviklernes infrastruktur.
På den anden side kræver hver ekstra modul i standardbiblioteket ressourcer fra Python-udviklerteamet til vedligeholdelse. Biblioteket har akkumuleret et stort antal duplikerede og unødvendige funktioner, og ved at fjerne disse kan man reducere omkostningerne til vedligeholdelse. I takt med udviklingen af kataloget og forenklingen af installations- og downloadprocessen for ekstra pakker, er det i dag ligeså almindeligt at anvende eksterne moduler som indbyggede funktioner.
Flere og flere udviklere anvender mere funktionelle eksterne erstatninger for standardmodulerne, for eksempel bruger de lxml-modulet i stedet for xml. Fjernelse af forladte moduler fra standardbiblioteket vil øge populariteten af de aktivt udviklede alternativer i fællesskabet. Desuden vil en reduktion af standardbiblioteket føre til en mindre grundpakke, hvilket er relevant ved brug af Python på indlejrede platforme med begrænset lagerplads.
Kilde: opennet.ru
