Намечана вялікая чыстка стандартнай бібліятэкі Python

Распрацоўнікі праекта Python апублікавалі прапанова (PEP 594) па правядзенні значнай чысткі стандартнай бібліятэкі. Да вынасу са стандартнай бібліятэкі Python прапануюцца як відавочна састарэлыя і вузкаспецыялізаваныя магчымасці, так і кампаненты, у якіх маюцца архітэктурныя праблемы і якія не атрымоўваецца ўніфікаваць для ўсіх платформаў.

Напрыклад, са стандартнай бібліятэкі прапанавана выключыць такія модулі, як crypt (недаступнасць для Windows і залежнасць даступнасці алгарытмаў хэшавання ад сістэмных бібліятэк), cgi (не аптымальная архітэктура, патрабуецца запуск новага працэсу на кожны запыт), imp (рэкамендавана выкарыстоўваць importlib), pipes ( рэкамендавана выкарыстоўваць модуль subprocess), nis (рэкамендавана выкарыстоўваць NSS, LDAP або Kerberos/GSSAPI), spwd (не рэкамендавана напрамую працаваць з БД уліковых запісаў). Для выдалення таксама пазначаныя модулі binhex, uu, xdrlib,
aifc,
audioop,
chunk,
imghdr,
ossaudiodev,
sndhdr,
sunau,
asynchat,
asyncore,
cgitb,
smtpd,
nntplib, macpath,
formatter, msilib і parser.

У адпаведнасці з прапанаваным планам у Python 3.8 вышэйзгаданыя модулі плануецца адзначыць састарэлымі, у Python 3.8 пачаць выводзіць папярэджанне, а ў Python 3.10 выдаліць з рэпазітароў CPython.
Модуль parser плануецца выдаліць у версіі 3.9, бо ён пазначаны састарэлым яшчэ ў выпуску Python 2.5, а модуль macpath у галінцы 3.8. Пасля выдалення з асноўнага складу код будзе вынесены ў асобны рэпазітар legacylib і яго лёс будзе залежаць ад цікавасці прадстаўнікоў супольнасці. Чакаецца, што галінка Python 3.9 будзе падтрымлівацца да 2026 года, што дасць дастаткова часу для пераводу праектаў на знешнія альтэрнатывы.

Першапачаткова для выдалення таксама былі прапанаваны модулі ftplib, optparse, getopt, colorsys, fileinput, lib2to3 і wave, але іх было вырашана пакуль пакінуць у складзе стандартнай бібліятэкі, бо яны шырока распаўсюджаны і застаюцца актуальнымі, нягледзячы на ​​наяўнасць больш дасканалых альтэрнатыў ці прывязкі да спецыфічным магчымасцям аперацыйных сістэм.

Нагадаем, што першапачаткова праектам Python прымяняецца падыход "батарэйкі ўваходзяць у камплект", пры якім у стандартнай бібліятэцы прапануецца шырокі набор функцый для розных абласцей прымянення. Сярод добрых якасцяў такога падыходу – спрашчэнне суправаджэння праектаў на Python і адсочвання бяспекі выкарыстоўваных у праектах модуляў. Уразлівасці ў модулях нярэдка становяцца крыніцай уразлівасцяў у выкарыстоўвалых іх прыкладаннях. У выпадку, калі функцыі ўваходзяць у стандартную бібліятэку дастаткова кантраляваць стан асноўнага праекта. Пры расшчапленні стандартнай бібліятэкі распрацоўнікам патрабуецца выкарыстоўваць іншыя модулі, уразлівасці ў кожным з якіх неабходна кантраляваць асобна. Пры высокай ступені драбнення і вялікай колькасці залежнасцяў узнікае пагроза нападаў праз кампраметацыю інфраструктуры распрацоўнікаў модуляў.

З іншага боку, кожны дадатковы модуль у стандартнай бібліятэцы патрабуе рэсурсаў ад каманды распрацоўшчыкаў Python для суправаджэння. У бібліятэцы назапасілася вялікая колькасць якія дублююцца і залішніх функцый, выключыўшы якія можна зменшыць выдаткі на суправаджэнне. Па меры развіцця каталога PyPI і спрашчэнні працэсу ўсталёўкі і загрузкі дадатковых пакетаў, ужыванне вонкавых модуляў у сучаснасць стала гэтак жа звыклым як і ўбудаваных функцый.

Усе вялікія распрацоўшчыкаў выкарыстоўваюць больш функцыянальныя вонкавыя замены стандартным модулям, напрыклад, ужываюць модуль lxml замест xml. Выдаленне закінутых модуляў са стандартнай бібліятэкі дасць магчымасць павысіць папулярнасць альтэрнатываў, якія актыўна развіваюцца супольнасцю. Акрамя таго, скарачэнне стандартнай бібліятэкі прывядзе да памяншэння памеру базавай пастаўкі, што актуальна пры выкарыстанні Python на ўбудаваных платформах з абмежаваным памерам сховішча.

Крыніца: opennet.ru

Дадаць каментар