The fate of "small" open source 🔥 Горячее 💬 Длинная дискуссия
Автор статьи рассматривает судьбу небольших open source библиотек на примере своего пакета blob-util, который уже 10 лет стабильно набирает более 5 миллионов загрузок в неделю. С ростом использования ИИ (около 80% разработчиков уже применяют его в работе), такие утилиты становятся менее востребованными, ведь LLM вроде Claude способны генерировать аналогичный код по запросу. Автор отмечает, что хотя сгенерированный код может быть даже более надёжным, исчезает образовательная составляющая — его библиотека включала не только функционал, но и обучающие материалы с забавными примерами, помогающие понять принципы работы с Blob в JavaScript.
По мнению автора, эра небольших низкозначимых библиотек подходит к концу, и ИИ становится последним гвоздём в гробу этого явления, хотя и до этого многие функции перешли в браузеры и Node.js. Это означает не только упрощение разработки, но и потерю возможности использовать такие библиотеки как трамплин для обучения разработчиков. Возможно, в будущем понимание механики работы таких утилит станет так же необязательным, как и умение разворачивать бинарное дерево, о чём многие разработчики уже давно спорят.
Комментарии (206)
- Разработчики всё чаще полагаются на ИИ, что ставит под сомнение ценность мелких утилитарных библиотек и даже саму идею open-source как таковой.
- Сообщество уже не в состоянии оценить ценность мелких, но полезных вкладов, поскольку ИИ может их сгенерировать за секунды.
- Это ведёт к тому, что единственный способ остаться востребованным — это делать действительно сложные и полезные вещи, а не просто публиковать мелкие скрипты.
- Парадокс в том, что даже если кто-то и захочет внести вклад в open-source, то непонятно, как теперь оценить этот вклад.
- В конечном счёте, если мы хотим, чтобы open-source выжил, мы должны будем придумать, как оценивать вклад и признание заслуг — возможно, через систему репутации и/или сертификации.
Why we migrated from Python to Node.js 💬 Длинная дискуссия
Команда Skald переписала бэкенд с Python на Node.js всего через неделю после запуска, идя против стандартного совета стартапам сначала "делать то, что не масштабируется". Основная причина — сложность с асинхронностью в Python, особенно при работе с Django. Автор отмечает, что писать качественный асинхронный код на Python "очень сложно и неинтуитивно", в отличие от JavaScript с его event loop или Go с goroutines.
Django до сих пор не имеет полной поддержки асинхронности: нет нативного асинхронного файлового ввода-вывода, ORM не поддерживает async, а для интеграции синхронных и асинхронных функций требуется постоянно писать sync_to_async и async_to_sync. Даже крупные компании вроде PostHog, несмотря на наличие AI-фич, продолжают использовать традиционный WSGI вместо полного перехода на асинхронность. В итоге команда пришла к выводу, что Django скоро начнет создавать проблемы с производительностью даже при небольшом количестве пользователей.
Комментарии (189)
- Обсуждение в основном вращается вокруг того, что Python/async-экосистема остаётся незрелой, а Django-ORM не предназначена для асинхронной работы, что делает выбор между «старым, но проверенным» и «новым, но сырым» неоднозначным.
- Участники спорят, стоит ли жертвовать удобством разработки и экосистемой ради производительности, или же лучше переписать всё на Node/TypeScript, если речь идёт о высоконагруженном REST API.
- Поднимается вопрос о том, что выбор стека влияет на набор инженеров, и что важнее — удобство разработки или производительность.
- Некоторые участники подчеркивают, что важно не только выбрать правильный инструмент, но и уметь его использовать, иначе даже самый современный фреймворк не спасёт от проблем с масштабированием.
Python 3.14 is here. How fast is it? 🔥 Горячее 💬 Длинная дискуссия
Python 3.14 вышел 8 октября 2025 года. Автор сравнил его с 3.9-3.13, а также с PyPy 3.11, Node.js 24 и Rust 1.90. Для тестов использовались два скрипта: рекурсивный расчет 40-го числа Фибоначчи и пузырьковая сортировка 10 000 элементов. Все тесты запускались на ноутбуке с Intel Core i5 под Ubuntu и ноутбуке Apple M2 под macOS.
Результаты: CPython 3.14 оказался на 10-15% быстрее 3.13 и примерно вдвое быстрее 3.9. JIT в 3.14 работает стабильно, а в 3.13 еще может выдавать сбои. Free-threading в 3.14 показал себя как надежный способ распараллеливать задачи, но прирост не столь драматичен, как ожидалось. PyPy 3.11 оказался в 2-3 раза быстрее CPython 3.14, но требует в 2-3 раза больше памяти. Node.js и Rust оказались в 2-3 раза быстрее, но это сравнение не совсем корректно, так как они не тестировали рекурсию.
Комментарии (499)
- Пользователи обсуждают производительность Python 3.14, сравнивая его с PyPy и другими языками, и обсуждают, почему сообщество продолжает тратить усилия на ускорение CPython вместо перехода на PyPy.
- Несколько комментаторов отмечают, что 3.14 всё ещё значительно уступает PyPy и даже Node.js в ряде тестов, хотя и демонстрирует прогресс.
- Обсуждается, почему Python не может быть переименован в π-thon, несмотря на то, что это было бы логично, и почему не используется возможность перехода на PyPy, несмотря на то, что он быстрее.
- Участники также обсуждают, что, несмотря на то, что Python всё ещё остаётся медленным, он остаётся незаменимым для прототипирования и имеет огромную экосистему библиотек, что делает его незаменимым для многих задач.
- Наконец, обсуждается, что, несмотря на то, что Python медленный, он всё ещё может быть использован для большинства задач, и что важнее всего - он всё ещё может быть использован для большинства задач.
Cap'n Web: a new RPC system for browsers and web servers 🔥 Горячее 💬 Длинная дискуссия
Cap'n Web — это новая система RPC для браузеров и веб-серверов, созданная Cloudflare на чистом TypeScript. Она наследует философию объектно-ориентированных возможностей (object-capability) от Cap'n Proto, но оптимизирована для веб-стека: использует JSON для сериализации, работает поверх HTTP, WebSocket и postMessage(), весит менее 10 КБ и не требует схем или шаблонного кода. Поддерживает двусторонние вызовы, передачу функций и объектов по ссылке, а также конвейеризацию промисов для сокращения задержек.
Настройка занимает буквально несколько строк: клиент подключается через WebSocket, а сервер реализуется как класс с методами, которые автоматически становятся удалёнными процедурами. Например, метод hello(name) на сервере можно вызвать из браузера как api.hello("World"). Система интегрируется с TypeScript для типобезопасности и работает в Cloudflare Workers, Node.js и современных браузерах. Это делает распределённое программирование почти неотличимым от локального, с учётом сетевых реалий.
Комментарии (251)
- Обсуждение Cap'n Web как упрощённой, schemaless версии Cap'n Proto RPC для TypeScript/JavaScript с поддержкой передачи функций и двусторонних вызовов.
- Сравнение с другими технологиями: проводятся параллели с GraphQL (решение проблемы N+1, но без DataLoader), tRPC/ORPC (схемы vs schemaless), gRPC-web (сложность) и старыми системами вроде Java RMI или .NET Remoting.
- Подняты вопросы о безопасности (риски из-за отсутствия схем и передачи произвольных колбэков), состоянии сервера (статусность vs статусность) и проблемах отладки (сложность отслеживания сетевых запросов).
- Обсуждаются технические детали: пайплайнинг промисов для уменьшения RTT, выполнение
.map()на сервере через DSL, управление памятью и сборкой мусора для долгоживущих соединений. - Запросы на расширение: поддержка других языков (Rust, Elixir), стриминг, генераторы, версионирование API и бинарная совместимость с Cap'n Proto.
Shai-Hulud malware attack: Tinycolor and over 40 NPM packages compromised 🔥 Горячее 💬 Длинная дискуссия
Компрометация пакетов ctrl/tinycolor и 40+ других в NPM
Популярный пакет @ctrl/tinycolor с более чем 2 млн загрузок в неделю был скомпрометирован вместе с 40+ другими пакетами в результате сложной атаки на цепочку поставок. Вредоносное ПО самораспространяется по пакетам maintainer'ов, собирает учетные данные AWS/GCP/Azure с помощью TruffleHog и создает бэкдоры через GitHub Actions.
Технический анализ
Атака реализуется через многоступенчатую цепочку, использующую Node.js process.env для доступа к учетным данным. Основной элемент — файл bundle.js (~3.6 МБ), который выполняется асинхронно во время npm install.
Механизм самораспространения
Вредоносное ПО через функцию NpmModule.updatePackage запрашивает API реестра NPM для получения до 20 пакетов maintainer'а и принудительно публикует обновления, создавая каскадный эффект компрометации.
Сбор учетных данных
Используются инструменты вроде TruffleHog для сканирования файловой системы на наличие секретов. Целевые учетные данные включают:
- Токены доступа GitHub
- Ключи доступа AWS
- Учетные данные Google Cloud Platform
Комментарии (962)
- Пользователи выражают обеспокоенность невозможностью аудита всех зависимостей и их уязвимостью к атакам в npm.
- Критикуется архитектура npm, в частности выполнение postinstall-скриптов по умолчанию, в отличие от других менеджеров пакетов.
- Предлагаются решения: игнорирование скриптов в настройках, песочница (bubblewrap), использование подписей кода и каррированных пакетов.
- Указывается на системную проблему экосистемы JS: огромное количество мелких зависимостей и отсутствие сильной стандартной библиотеки.
- Обсуждается масштаб атаки (180+ пакетов) и её возможная связь с государственными акторами.
- Поднимается вопрос уязвимости других экосистем (PyPI) и необходимости обязательной 2FA и подписи артефактов.
- Высказываются радикальные предложения по замене npm или созданию безопасного форка/дистрибутива пакетов.
Behind the scenes of Bun Install 🔥 Горячее
Как устроен bun install
- Один бинарник — весь менеджер зависимостей живёт внутри Bun, нет внешних вызовов к npm, yarn, node-gyp.
- Сишный движок — парсинг package.json, yarn.lock, node_modules происходит на Zig, без JS-оверхеда.
- HTTP-пул + кэш — 50–100 параллельных потоков, кэш на диске + SQLite-индекс, повторный install — <100 мс.
- Symlink-ферма — модули не копируются, а hard-link’ются из глобального кэша; экономия 70 % диска.
- Муравьиный алгоритм — сначала скачиваются «листья» дерева зависимостей, потом родители; сеть греется максимально.
- Платформенные пакеты — если в lock-файле есть запись под Linux, macOS и Windows, скачиваются сразу три архива и раскладываются в
node_modules/.cache, при запуске выбирается нужный. - postinstall без shell — скрипты запускаются встроенным JS-движком, нет overhead’а на spawn bash/cmd.
- Проверка целостности — каждый tarball сверяется по SHA256 из lock-файла, кэш защищён от подмены.
- Мониторинг прогресса — терминал обновляется раз в 16 мс, рисуется ASCII-полоса и счётчик «пакетов/сек».
- Фоллбек к npm — если пакет не найден в официальном реестре, Bun автоматом лезет в npm и кладёт tarball в кэш, пользователь не замечает разницы.
Комментарии (134)
- Пользователи обсуждают статью о внутреннем устройстве и производительности менеджера пакетов Bun.
- Многие хвалят скорость и простоту Bun, но отмечают проблемы совместимости с Node.js и стабильностью.
- Часть комментаторов сомневается в практической пользе высокой скорости установки пакетов и считает переход с Node.js рискованным.
- Упоминаются альтернативы — Deno, pnpm, npm — и сравнение с ними по скорости и надёжности.
- Некоторые считают, что Bun не предлагает «убийственных» фич, чтобы оправдать переход с зрелой экосистемы Node.js.