Намечена большая чистка стандартной библиотеки 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