/ Web-технологии / JavaScript | ||
· | 03.05 | Обход верификации в библиотеке xml-crypto, насчитывающей миллион загрузок в неделю (15 +15) |
В JavaScript-библиотеке xml-crypto, используемой в качестве зависимости у 402 проектов и загружаемой из каталога NPM около миллиона раз каждую неделю, выявлена уязвимость (CVE-2024-32962), которой присвоен максимальный уровень опасности (10 из 10). Библиотека предоставляет функции для шифрования и верификации по цифровой подписи XML-документов. Уязвимость даёт возможность атакующему заверить фиктивный документ, который в конфигурации по умолчанию будет успешно верифицирован библиотекой, несмотря на то, что он подписан не тем ключом, что указан для проверки подписей. Проблема проявляется начиная с версии xml-crypto 4.0.0 и без лишней огласки устранена в январском выпуске 6.0.0.
Уязвимость вызвана тем, что в конфигурации по умолчанию библиотека не авторизирует создателя подписи, а проверяет только корректность самой подписи. В частности, библиотека доверяет любому сертификату, размещённому в подписанном документе в XML-элементе KeyInfo, даже если в настройках указано использование конкретного сертификата для проверки цифровых подписей. Таким образом, для успешной верификации модифицированного документа атакующему достаточно заменить оригинальную цифровую подпись на подпись, сформированную своим закрытым ключом, и разместить связанный с этим закрытым ключом сертификат (открытый ключ) в элементе KeyInfo.
| ||
Обсуждение (15 +15) |
Тип: Проблемы безопасности |
| ||
· | 25.04 | Доступна JavaScript-платформа Node.js 22.0.0 (40 +4) |
Состоялся релиз Node.js 22.0, платформы для выполнения сетевых приложений на языке JavaScript. Node.js 22.0 отнесён к веткам с длительным сроком поддержки, но данный статус будет присвоен только в октябре, после проведения стабилизации. Поддержка Node.js 22.x будет осуществляться до 30 апреля 2027 года. Сопровождение прошлой LTS-ветки Node.js 20.x продлится до апреля 2026 года, а позапрошлой LTS-ветки 18.x до апреля 2025 года. Сопровождение промежуточной ветки Node.js 21.x будет прекращено 1 июня 2024 года.
Платформа Node.js может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры. Для обеспечения обработки большого числа параллельных запросов Node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживаются такие методы, как epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libuv, которая является надстройкой над libev в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe). Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8 (дополнительно Microsoft развивает вариант Node.js с движком Chakra-Core). По своей сути Node.js похож на фреймворки Perl AnyEvent, Ruby Event Machine, Python Twisted и реализацию событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере.
| ||
Обсуждение (40 +4) |
Тип: Программы |
| ||
· | 12.03 | Mozilla, Google, Microsoft и Apple разработали тест производительности браузеров Speedometer 3.0 (127 +22) |
Спустя шесть лет c момента прошлого выпуска представлен обновлённый инструментарий для тестирования производительности и отзывчивости web-браузеров - Speedometer 3.0, подготовленный совместно компаниями Mozilla, Google, Microsoft и Apple. Ключевой задачей тестового набора называется оценка задержек при симуляции работы пользователя с типовыми web-приложениями.
Speedometer 3.0 стал первым набором для оценки производительности браузеров, созданным совместно представителями конкурирующих браузерных движков Blink/V8, Gecko/SpiderMonkey и WebKit/JavaScriptCore, которые сумели выработать общую политику в отношении тестирования. Код Speedometer распространяется под лицензией BSD и начиная с 2022 года разрабатывается в соответствии с новой моделью управления проектом, подразумевающей совместное принятие решений с достижением консенсуса. Репозиторий открыт для участия любых заинтересованных лиц и продвижения своих идей и исправлений. В Speedometer 3.0 осуществлён переход на применение новых выпусков фреймворков Angular, Backbone, jQuery, Lit, Preact, React, React+Redux, Svelte и Vue. Задействованы современные шаблоны проектирования сайтов и web-приложений, например, использование Webpack, Web Components и новых методов работы с DOM. Добавлены тесты для оценки производительности отрисовки при помощи элемента Canvas, генерации SVG, обработки сложных CSS, работы с очень большими деревьями DOM и использования методов, применяемых при редактировании контента в режиме WYSIWYG и при работе с новостными сайтами. В инструментарии для запуска тестов расширен спектр операций в браузере, учитываемых при измерении реакции на действие пользователя, например, измеряется не только время выполнения кода, но и время отрисовки и асинхронного выполнения задач. Для разработчиков браузеров подготовлены инструменты для анализа результатов выполнения тестов, профилирования и изменения параметров тестов. Предоставлена возможность создания собственных сложных сценариев запуска тестов. Эталонные тесты, задействованные в Speedometer 3.0 для оценки производительности:
При прохождении тестового набора Speedometer 3.0 в macOS лидирует Chrome (22.6), за которым следуют Firefox (20.7) и Safari (19.0). В проведённом с теми же браузерами тесте Speedometer 2.1 победил Safari (481), от которого немного отстал Firefox (478) и заметно отстал Chrome (404). При запуске в Ubuntu 22.04 браузер Chrome набрал 13.5 и 234 баллов, а Firefox - 12.1 и 186 баллов в версиях Speedometer 3.0 и 2.1.
| ||
Обсуждение (127 +22) |
Тип: К сведению |
| ||
· | 16.02 | Уязвимости в Node.js и libuv (33 +15) |
Доступны корректирующие выпуски JavaScript-платформы Node.js 21.6.2, 20.11.1, 18.19.1, в которых исправлено 8 уязвимостей, из которых 4 присвоен высокий уровень опасности:
Дополнительно можно отметить формирование выпуска библиотеки libuv 1.48.0, применяемой в Node.js для мультиплексирования соединений и асинхронной обработки ввода/вывода. Кроме Node.js библиотека также используется DNS-серверах BIND 9 и Knot DNS, HTTP-сервере H2O, Lua-фреймворке Luvit, виртуальной машине MoarVM, языке Julia и Python-фреймворке uvloop. В новой версии устранена уязвимость (CVE-2024-24806), проявляющаяся в проектах, использующих libuv, и позволяющая осуществить атаку SSRF (Server-side request forgery) для получения доступа к внутреннему API. Уязвимость возникла из-за обрезания имени хоста функцией uv_getaddrinfo() до 256 символов на этапе до резолвинга домена через функцию getaddrinfo(), что может привести к определению не того IP-адреса и обходу проверок. Например, сервисы типа MySpace, создающие поддомены вида "username.example.com", можно атаковать через указание длинного имени пользователя. Также вышло обновление используемого в Node.js HTTP-клиента undici 5.28.3, в котором устранена уязвимость (CVE-2024-24758), вызванная отсутствием очистки HTTP-заголовка Proxy-Authorization при перенаправлении запросов.
| ||
Обсуждение (33 +15) |
Тип: Проблемы безопасности |
| ||
· | 29.11 | Выпуск децентрализованной видеовещательной платформы PeerTube 6.0 (111 +26) |
Состоялся выпуск децентрализованной платформы для организации видеохостинга и видеовещания PeerTube 6.0. PeerTube предлагает независимую от отдельных поставщиков альтернативу YouTube, Dailymotion и Vimeo, использующую сеть распространения контента на базе P2P-коммуникаций и связывания между собой браузеров посетителей. Наработки проекта распространяются под лицензией AGPLv3.
Платформа PeerTube изначально была основана на применении BitTorrent-клиента WebTorrent, запускаемого в браузере и использующего технологию WebRTC для организации прямого P2P-канала связи между браузерами. Позднее вместо WebTorrent был задействован протокол HLS (HTTP Live Streaming) в связке с WebRTC, позволяющий адаптивно управлять потоком в зависимости от полосы пропускания. Для объединения разрозненных серверов с видео в общую федеративную сеть, в которой посетители участвуют в доставке контента и имеют возможность подписки на каналы и получения уведомлений о новых видео, задействован протокол ActivityPub. Предоставляемый проектом web-интерфейс построен с использованием фреймворка Angular. Федеративная сеть PeerTube образуется как содружество связанных между собой небольших серверов хостинга видео, на каждом из которых имеется свой администратор и могут быть приняты свои правила. Каждый сервер с видео выполняет роль BitTorrent-трекера, на котором размещены учётные записи пользователей данного сервера и их видео. Идентификатор пользователя формируются в форме "@имя_пользователя@домен_сервера". Передача данных при просмотре осуществляется непосредственно из браузеров других посетителей, просматривающих контент. Если видео никто не просматривает, отдача организуется сервером, на который изначально загружено видео (используется протокол WebSeed). Помимо распределения трафика между пользователями, просматривающими видео, PeerTube также позволяет узлам, запущенным авторами для первичного размещения видео, кэшировать видео других авторов, формируя распределённую сеть не только из клиентов, но и из серверов, а также обеспечивая отказоустойчивость. Имеется поддержка потокового вещания (live streaming) с доставкой контента в режиме P2P (для управления стримингом могут использоваться типовые программы, такие как OBS). Для начала вещания через PeerTube пользователю достаточно загрузить на один из серверов видеоролик, описание и набор тегов. После этого ролик станет доступен во всей федеративной сети, а не только с сервера первичной загрузки. Для работы с PeerTube и участия в распространении контента достаточно обычного браузера и не требуется установка дополнительного ПО. Пользователи могут отслеживать активности в выбранных видеоканалах, подписавшись на интересующие каналы в федеративных социальных сетях (например, в Mastodon и Pleroma) или через RSS. Для распространения видео с использованием P2P-коммуникаций пользователь также может добавить на свой сайт специальный виджет со встроенным web-плеером. В настоящее время для размещения контента функционирует 1122 сервера, поддерживаемых разными добровольцами и организациями. Если пользователя не устраивают правила размещения видео на определённом сервере PeerTube, он может подключиться к другому серверу или запустить свой собственный сервер. Для быстрого развёртывания сервера предоставляется преднастроенный образ в формате Docker (chocobozzz/peertube).
| ||
Обсуждение (111 +26) |
Тип: Программы |
| ||
· | 21.10 | Доступна JavaScript-платформа Node.js 21.0 (123 +9) |
Состоялся релиз Node.js 21.0, платформы для выполнения сетевых приложений на языке JavaScript. Поддержка ветки Node.js 21.0 будет осуществляться в течение 6 месяцев. В ближайшие дни будет завершена стабилизация ветки Node.js 20, которая получит статус LTS и будет поддерживаться до апреля 2026 года. Сопровождение прошлой LTS-ветки Node.js 18.0 продлится до сентября 2025 года, а позапрошлой LTS-ветки 16.0 до апреля 2024 года.
Платформа Node.js может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры. Для обеспечения обработки большого числа параллельных запросов Node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживаются такие методы, как epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libuv, которая является надстройкой над libev в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe). Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8 (дополнительно Microsoft развивает вариант Node.js с движком Chakra-Core). По своей сути Node.js похож на фреймворки Perl AnyEvent, Ruby Event Machine, Python Twisted и реализацию событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере.
| ||
Обсуждение (123 +9) |
Тип: Программы |
| ||
· | 15.10 | Выпуск платформы Electron 27.0 с включением режима декорирования окон для Wayland (114 +4) |
Опубликован релиз платформы Electron 27.0.0, которая предоставляет самодостаточный фреймворк для разработки многоплатформенных пользовательских приложений, использующий в качестве основы компоненты Chromium, V8 и Node.js. Значительное изменение номера версии связано с обновлением до кодовой базы Chromium 118, платформы Node.js 18.17.1 и JavaScript-движка V8 11.8.
Среди изменений в новом выпуске:
Платформа Electron позволяет создавать любые графические приложения с использованием браузерных технологий, логика работы которых определяется на JavaScript, HTML и CSS, а функциональность может быть расширена через систему дополнений. Разработчикам доступны модули Node.js, а также расширенный API для формирования нативных диалогов, интеграции приложений, создания контекстных меню, интеграции с системой вывода уведомлений, манипуляции окнами, взаимодействия с подсистемами Chromium. В отличие от web-приложений, программы на базе Electron поставляются в виде самодостаточных исполняемых файлов, не привязанных к браузеру. При этом разработчику не нужно заботиться о портировании приложения для различных платформ, Electron обеспечит возможность сборки для всех систем, поддерживаемых в Chromium. Electron также предоставляет средства для организации автоматической доставки и установки обновлений (обновления можно доставлять как с отдельного сервера, так и напрямую с GitHub). Из программ, построенных на базе платформы Electron можно отметить редактор Atom, почтовый клиент Mailspring, инструментарий для работы с Git GitKraken, система ведения блогов WordPress Desktop, BitTorrent-клиент WebTorrent Desktop, а также официальные клиенты к таким сервисам, как Skype, Signal, Slack, Basecamp, Twitch, Ghost, Wire, Wrike, Visual Studio Code и Discord. Всего в каталоге программ Electron представлено 744 приложения. Для упрощения разработки новых приложений подготовлен набор типовых демонстрационных приложений, включающих примеры кода для решения различных задач.
| ||
Обсуждение (114 +4) |
Тип: Программы |
| ||
· | 07.10 | Выпуск jsii 1.90, генератора кода C#, Go, Java и Python из TypeScript (53 +4) |
Компания Amazon опубликовала компилятор jsii 1.90, представляющий собой модификацию компилятора TypeScript, позволяющую извлечь из компилируемых модулей информацию об API и сгенерировать универсальное представление данного API для обращения к JavaScript-классам из приложений на различных языках программирования. Код проекта написан на TypeScript и распространяется под лицензией Apache 2.0.
Jsii даёт возможность создавать на языке TypeScript библиотеки классов, которые могут использоваться в проектах на языках C#, Go, Java и Python, благодаря трансляции в родные для этих языков модули, предоставляющие тот же самый API. Инструментарий используется в AWS Cloud Development Kit для поставки библиотек для разных языков программирования, формируемых из одной кодовой базы. В новой версии реализовано кэширование списка классов для каждой сборки и документировано как можно превратить обязательное свойство в необязательное. Пример исходного кода на TypeScript с классом Greeter и последующие примеры его использования в языках C#, Go, Python и Java в качестве родного класса для этих языков: export class Greeter { public greet(name: string) { return `Hello, ${name}!`; } } Представление, скомпилированное в C# var greeter = new Greeter(); greeter.Greet("World"); // => Hello, World! Представление, скомпилированное в Go greeter := NewGreeter() greeter.Greet("World") // => Hello, World! Представление, скомпилированное в Java final Greeter greeter = new Greeter(); greeter.greet("World"); // => Hello, World! Представление, скомпилированное в JavaScript const greeter = new Greeter(); greeter.greet("World"); // => Hello, World! Представление, скомпилированное в Python greeter = Greeter() greeter.greet("World") # => Hello, World! | ||
Обсуждение (53 +4) |
Тип: Программы |
| ||
· | 11.09 | Доступна серверная JavaScript-платформа Bun 1.0, более быстрая, чем Deno и Node.js (104 +25) |
Представлен первый значительный выпуск платформы Bun, предназначенной для обособленного выполнения приложений, написанных на языках JavaScript, JSX и TypeScript. Проект нацелен на использование в качестве прозрачной замены платформы Node.js, поддерживает используемые в Node.js механизмы работы с модулями и обработки зависимостей. Код проекта написан на языках Zig и С++, и распространяется под лицензией MIT. Для выполнения JavaScript задействован JavaScript-движок JavaScriptCore и компоненты проекта WebKit с дополнительными патчами.
В состав Bun входит полный набор инструментов для создания и выполнения приложений на языках JavaScript и TypeScript. Среди прочего, платформа предоставляет runtime для создания серверных обработчиков и выполнения JavaScript-приложений без браузера, совместимый с NPM пакетный менеджер, инструментарий для выполнения тестов, систему сборки самодостаточных пакетов и утилиту bunx для установки и запуска пакетов из репозитория NPM (эквивалент npx и yarn dlx). Заявлены такие цели, как возможность запуска большей части существующих серверных JavaScript-приложений, достижение высокой производительности и предоставление инструментов для снижения сложности разработки и повышения производительности труда. Проект также предоставляет минимальный набор оптимизированных API для эффективного выполнения таких задач, как запуск HTTP-сервера и работа с файлами. Поддерживается режим "bun --hot" для автоматической горячей перезагрузки кода в случае изменения файлов приложения, выполняемой без остановки работы программы (при перезагрузке установленные соединения не будут оборваны и состояние не будет потеряно). Особенностью Bun является очень высокая производительность. Например, в тестах на выполнение серверного приложения на базе фреймворка React применение Bun демонстрирует в два раза большую пропускную способность (число обработанных приложением HTTP-запросов в секунду), чем платформа Deno и в 4.7 раза, чем Node.js. В тесте на работу чат-сервера, использующего WebSocket, Bun обгоняет Deno в два раза, а Node.js - в 6 раз. В тесте загрузки больших таблиц из SQLite платформа Bun быстрее Deno в два раза, а Node.js - в 4 раза. Выполнение установки приложений при помощи команды "bun install" производится в 25 раз быстрее, чем при использовании "npm install", а сборка командой "bun build" в 1.76 быстрее esbuild, в 26 раз быстрее rspack, в 155 раз быстрее Parcel 2 и в 224 раза быстрее WebPack 5. По сравнению с Node.js и Deno, использующими JavaScript-движок V8, Bun построен на базе фреймворка JavaScriptCore, развиваемого компанией Apple для браузера Safari. Кроме высокой производительности применение JavaScriptCore также позволило снизить потребление памяти. Проект развивается с оглядкой на обеспечение совместимости с серверными приложениями, написанными для Node.js, поддерживает большую часть API Node.js, включая модули и структуры fs, path, http, process, __dirname и Buffer. Поддерживается и традиционный Web API, включая объекты fetch, WebSocket и ReadableStream. Предоставляется совместимость как с модулями Node.js (CommonJS и node_modules), так и с JavaScript-модулями (ESM), созданными в соответствии со спецификацией ECMAScript 6 и применяемыми в браузерных web-приложениях. В текущем виде большинство npm-пакетов, созданных для Node.js, могут быть запущены в Bun без внесения изменений или с минимальными правками. Поддерживаются многие серверные фреймворки, такие как Express, Koa и Hono. Платформа также может заменить собой множество сопутствующих инструментов, развиваемых для экосистемы Node.js. Например, Bun может использоваться для запуска файлов с расширениями .js, .ts, .cjs, .mjs, .jsx и .tsx, заменяя такие системы, как tsc, babel, ts-node, ts-node-esm и tsx. Встроенная система сборки обособленных программ позволяет обойтись без esbuild, webpack, parcel и rollup. Встроенный пакетный менеджер предоставляет команды, совместимые с npm, обрабатывает package.json, записывает результат в каталог node_modules и может заменить npm, yarn, pnpm и lerna.
| ||
Обсуждение (104 +25) |
Тип: Программы |
| ||
· | 11.09 | Разработка браузерного движка Servo переведена в организацию Linux Foundation Europe (54 +36) |
Проект по разработке браузерного движка Servo официально перешёл под управление некоммерческой организации Linux Foundation Europe, в которой будет развиваться как независимый браузерный движок на нейтральной площадке с привлечением сообщества из заинтересованных разработчиков и компаний.
Проект Servo был создан в 2012 году компанией Mozilla в рамках эксперимента по повышению безопасности и усилению многопоточности Firefox. В 2013 году к разработке подключилась компания Samsung. В 2020 году Mozilla уволила команду, развивавшую Servo, и передала проект под крыло организации Linux Foundation. После этого разработка движка около двух лет находилась в стагнации. В 2023 году к разработке Servo подключилась компания Igalia, которая является участником организации Linux Foundation Europe. Под эгидой организации Linux Foundation Europe компании Igalia удалось собрать новую команду инженеров, подключившихся к разработке Servo. Servo написан на языке Rust и отличается поддержкой многопоточного рендеринга web-страниц, а также распараллеливанием операций с DOM (Document Object Model). Кроме эффективного распараллеливания операций, используемые в Rust технологии безопасного программирования позволяют поднять уровень безопасности кодовой базы. Изначально браузерный движок Firefox не мог в полной мере задействовать потенциал современных многоядерных систем из-за использования однопоточных схем обработки контента. Servo позволяет разбить код DOM и рендеринга на более мелкие подзадачи, которые могут выполняться параллельно и более эффективно использовать ресурсы многоядерных CPU. В Firefox уже интегрированы некоторые части Servo, такие как многопоточный CSS-движок и система отрисовки WebRender.
| ||
Обсуждение (54 +36) |
Тип: К сведению |
| ||
· | 08.09 | Фреймворк Turbo прекращает использование языка TypeScript (150 +33) |
Давид Хейнемейер Ханссон (David Heinemeier Hansson), автогонщик и автор веб-фреймворка Ruby on Rails, объявил о прекращении поддержки языка программирования TypeScript в коде развиваемого им проекта Turbo и переходе на использование чистого JavaScript начиная с выпуска Turbo 8, без задействования строгой типизации. Уход от использования TypeScript во фреймворке Turbo не повлияет на возможность применения TypeScript в клиентском коде или подключение библиотек, написанных на TypeScript.
В качестве причины прекращения использования TypeScript упоминается то, что этот язык мешает автору при разработке и делает трудными вещи, которые должны быть простыми. Недовольство касается не только наличия дополнительной стадии компиляции TypeScript, но и того, что данный язык загрязняет код "гимнастикой с типами". Многие пользователи и участники разработки Turbo не согласились с внесённым изменением и считают, что решение было поспешным. Например, комментарий с мнением, что уход от TypeScript является шагом назад, поддержали 357 участников, а против высказалось всего 8. В качестве доводов за использование TypeScript упоминается упрощение выявления ошибок в коде и удобство при приёме изменений от сторонних участников. Предполагается, что смена языка может нарушить работу многих пакетов в экосистеме Hotwire, сделает неактуальными ожидающие принятия poll-запросы и нарушит логику работы систем автодополнения кода в интегрированных средах разработки. Недовольство некоторых вызвало не смена языка разработки, а то, что изменение было единолично утверждено без предварительного обсуждения с сообществом и игнорируя мнения других участников. В ответ Давид Ханссон пояснил, что обсуждение выбора между TypeScript или JavaScript вряд ли могло изменить фундаментальную позицию сторонников и противников TypeScript. Компания 37signals, которая курирует разработку проекта, полностью перешла на использование чистого JavaScript в клиентском коде и внутренних библиотеках. Использование чистого JavaScript не только значительно улучшает читаемость кода, но и избавляет разработчиков от выкрутасов с типами, производимых для удовлетворения капризов компилятора TypeScript. Фреймворк Turbo распространяется под лицензией MIT и изначально был создан компанией 37signals в процессе разработки платформы управления проектами Basecamp, аналогично тому, как в своё время для данной платформы был создан фреймворк Ruby on Rails. Turbo позиционируется как более простая альтернатива web-фреймворкам, формирующим представления страницы на стороне клиента. В Turbo применяется концепция построения интерактивных web-приложений "HTML-over-the-wire", при которой сервер вместо использования JSON напрямую отправляет клиенту HTML-код. Отмечается, что реализованный подход позволяет минимизировать использование JavaScript в web-приложении, обеспечить высокую производительность и упростить процесс доработки приложений. При использовании Turbo логика работы приложения не размазывается по фронтэнду и бэкенду, а определяется только на сервере с использованием языка программирования, наиболее удобного для разработчика. Браузер же занимается только обработкой готового HTML.
| ||
Обсуждение (150 +33) |
Тип: Тема для размышления |
| ||
· | 19.04 | Доступна серверная JavaScript-платформа Node.js 20.0 (142 +10) |
Состоялся релиз Node.js 20.0, платформы для выполнения сетевых приложений на языке JavaScript. Node.js 20.0 отнесён к веткам с длительным сроком поддержки, но данный статус будет присвоен только в октябре, после проведения стабилизации. Поддержка Node.js 20.x будет осуществляться до 30 апреля 2026 года. Сопровождение прошлой LTS-ветки Node.js 18.x продлится до апреля 2025 года, а позапрошлой LTS-ветки 16.x до сентября 2023 года. Сопровождение LTS-ветки 14.x будет прекращено 30 апреля, а промежуточной ветки Node.js 19.x - 1 июня.
Основные улучшения:
Платформа Node.js может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры. Для обеспечения обработки большого числа параллельных запросов Node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживаются такие методы, как epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libuv, которая является надстройкой над libev в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe). Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8 (дополнительно Microsoft развивает вариант Node.js с движком Chakra-Core). По своей сути Node.js похож на фреймворки Perl AnyEvent, Ruby Event Machine, Python Twisted и реализацию событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере. При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в Node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных.
| ||
Обсуждение (142 +10) |
Тип: Программы |
| ||
· | 06.04 | Выпуск Electron 24.0.0, платформы создания приложений на базе движка Chromium (196 –16) |
Подготовлен релиз платформы Electron 24.0.0, которая предоставляет самодостаточный фреймворк для разработки многоплатформенных пользовательских приложений, использующий в качестве основы компоненты Chromium, V8 и Node.js. Значительное изменение номера версии связано с обновлением до кодовой базы Chromium 112, платформы Node.js 18.14.0 и JavaScript-движка V8 11.2.
Среди изменений в новом выпуске:
Платформа Electron позволяет создавать любые графические приложения с использованием браузерных технологий, логика работы которых определяется на JavaScript, HTML и CSS, а функциональность может быть расширена через систему дополнений. Разработчикам доступны модули Node.js, а также расширенный API для формирования нативных диалогов, интеграции приложений, создания контекстных меню, интеграции с системой вывода уведомлений, манипуляции окнами, взаимодействия с подсистемами Chromium. В отличие от web-приложений, программы на базе Electron поставляются в виде самодостаточных исполняемых файлов, не привязанных к браузеру. При этом разработчику не нужно заботиться о портировании приложения для различных платформ, Electron обеспечит возможность сборки для всех систем, поддерживаемых в Chromium. Electron также предоставляет средства для организации автоматической доставки и установки обновлений (обновления можно доставлять как с отдельного сервера, так и напрямую с GitHub). Из программ, построенных на базе платформы Electron можно отметить редактор Atom, почтовый клиент Mailspring, инструментарий для работы с Git GitKraken, система ведения блогов WordPress Desktop, BitTorrent-клиент WebTorrent Desktop, а также официальные клиенты к таким сервисам, как Skype, Signal, Slack, Basecamp, Twitch, Ghost, Wire, Wrike, Visual Studio Code и Discord. Всего в каталоге программ Electron представлено 734 приложения. Для упрощения разработки новых приложений подготовлен набор типовых демонстрационных приложений, включающих примеры кода для решения различных задач.
| ||
Обсуждение (196 –16) |
Тип: Программы |
| ||
· | 17.03 | Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лицензии Apache 2.0 и LLVM (62 +5) |
Представлен компилятор Cheerp 3.0, позволяющий скомпилировать любой код C/C++ в WebAssembly или JavaScript. Новая ветка примечательна переводом компилятора и сопутствующих библиотек на использование пермиссивных лицензий Apache 2.0 и LLVM, вместо ранее применяемой ограниченной лицензионной политики, предлагающей вариант с лицензией GPLv2 для некоммерческих проектов и проприетарную лицензию для коммерческих. Код компилятора основан на наработках LLVM и Clang, и включает дополнительные оптимизации для повышения производительности и уменьшения размера скомпилированного результата.
Cheerp может применяться как для портирования существующих C/C++ библиотек и приложений для выполнения в браузере, так и для создания высокопроизводительных web-приложений и WebAssembly-компонентов с нуля. Проект позволяет комбинировать в одном web-приложении код на C/C++ и JavaScript с возможностью доступа из кода JavaScript к функциям, изначально разработанным на C/C++, а из кода C/C++ к объектам JavaScript, JavaScript-библиотекам, Web API и всем возможностям DOM. Допускается создание комбинированных сборок, часть кода в которых компилируется в JavaScript, а часть в WebAssembly. Поддерживается сборка проектов, использующих стандартные библиотеки libc и libc++. По сравнению с компилятором Emscripten, Cheerp генерирует более оптимизированный и компактный промежуточный код WebAssembly (в среднем размер итоговых файлов на 7% меньше). Концептуально различия сводятся к тому, что Emscripten используется в качестве объектного формата WebAssembly и выполняет связывание и оптимизацию на стадии постобработки WebAssembly (wasm-opt). В Cheerp в качестве промежуточного представления для библиотек и объектных файлов используется байткод в формате LLVM, что позволяет применять более широкие оптимизации, охватывающие проект в целом и использующие метаданные на уровне LLVM, без необходимости выполнения постобработки. Дополнительное в Cheerp применяются оптимизатор PreExecuter, обеспечивающий упреждающее выполнение кода на этапе компиляции, например, для преобразования в константы конструкторов, используемых для инициализации глобальных объектов. Также при компиляции используется PartialExecuter, который на основе анализа параметров функций удаляет код, который гарантированно не используется при выполнении. Cheerp также может генерировать код JavaScript для динамической работы с памятью, охватываемой сборщиком мусора. В частности, вместо эмулирования традиционного адресного пространства при помощи типизированных массивов, Cheerp обеспечивает прямой маппинг объектов C++ в объекты JavaScript, что позволяет снизить потребление памяти, так как сборщик мусора JavaScript имеет возможность удалять неиспользуемые объекты. Для повышения производительности в генерируемом промежуточном коде WebAssembly применяются SIMD-расширения, позволяющие организовать распараллеливание выполнения операций над данными. Cheerp может использоваться как платформа для создания интегрированных клиент/серверных web-приложений на языке C++. В существующей практике обычно отдельно разрабатываются выполняемый в браузере фронтэнд, написанный на языке JavaScript, и раздельная серверная часть, написанная на языках PHP, Python, Ruby или JavaScript/Node.js. Cheerp предоставляет средства для создания целостных web-приложений на языке C++, в которых бэкенд и фронтэнд поддерживаются в единой кодовой базе. В процессе компиляции серверная часть компилируется в нативный код, а интерфейс преобразуется в JavaScript-представление. Отладка всех компонентов проекта, в том числе преобразуемых в JavaScript, осуществляется по исходным текстам на языке C++ с использованием технологии Source Map (при возникновении ошибки можно увидеть участок кода на C++, поддерживается установка точек останова в коде C++ и построчного пошагового выполнения С++ кода).
| ||
Обсуждение (62 +5) |
Тип: Программы |
| ||
· | 10.02 | Выпуск Electron 23.0.0, платформы создания приложений на базе движка Chromium (89 –15) |
Подготовлен релиз платформы Electron 23.0.0, которая предоставляет самодостаточный фреймворк для разработки многоплатформенных пользовательских приложений, использующий в качестве основы компоненты Chromium, V8 и Node.js. Значительное изменение номера версии связано с обновлением до кодовой базы Chromium 110, платформы Node.js 18.12.1 и JavaScript-движка V8 11.
Среди изменений в новом выпуске:
Платформа Electron позволяет создавать любые графические приложения с использованием браузерных технологий, логика работы которых определяется на JavaScript, HTML и CSS, а функциональность может быть расширена через систему дополнений. Разработчикам доступны модули Node.js, а также расширенный API для формирования нативных диалогов, интеграции приложений, создания контекстных меню, интеграции с системой вывода уведомлений, манипуляции окнами, взаимодействия с подсистемами Chromium. В отличие от web-приложений, программы на базе Electron поставляются в виде самодостаточных исполняемых файлов, не привязанных к браузеру. При этом разработчику не нужно заботиться о портировании приложения для различных платформ, Electron обеспечит возможность сборки для всех систем, поддерживаемых в Chromium. Electron также предоставляет средства для организации автоматической доставки и установки обновлений (обновления можно доставлять как с отдельного сервера, так и напрямую с GitHub). Из программ, построенных на базе платформы Electron можно отметить редактор Atom, почтовый клиент Mailspring, инструментарий для работы с Git GitKraken, система ведения блогов WordPress Desktop, BitTorrent-клиент WebTorrent Desktop, а также официальные клиенты к таким сервисам, как Skype, Signal, Slack, Basecamp, Twitch, Ghost, Wire, Wrike, Visual Studio Code и Discord. Всего в каталоге программ Electron представлено 734 приложения. Для упрощения разработки новых приложений подготовлен набор типовых демонстрационных приложений, включающих примеры кода для решения различных задач.
| ||
Обсуждение (89 –15) |
Тип: Программы |
| ||
· | 11.01 | Уязвимость в NPM-пакете JsonWebToken, насчитывающем 10 млн загрузок в неделю (54 +7) |
В JavaScript-библиотеке JsonWebToken с реализацией технологии JSON Web Token (JWT) выявлена уязвимость (CVE-2022-23529), потенциально позволяющая добиться удалённого выполнения кода при передаче в функцию jwt.verify() специально оформленного параметра secretOrPublicKey при верификации JWT-запроса (примеров приложений, на которые может быть совершена атака не приведено). За последнюю неделю библиотека была загружена из каталога NPM более 10 млн раз. В качестве зависимости JsonWebToken задействован в более чем 22 тысячах пакетов, в которых используется для верификации и подписывания токенов JWT, применяемых для защищённой передачи информации в формате JSON. Уязвимость устранена в выпуске JsonWebToken 9.0.0.
Уязвимость вызвана ошибкой в реализации метода verify, который принимает три параметра (токен, secretOrPublicKey и набор опций), после чего проверяет корректность токена и возвращает декодированное содержимое. В соответствии со спецификацией параметр secretOrPublicKey может быть строкой или буфером, но в коде JsonWebToken это не учитывается и он всегда разбирается как строка с использованием метода toString(). Соответственно, если передать в secretOrPublicKey вместо строки JavaScript-объект с собственным методом toString(), то при проверке будет вызван указанный атакующим код. Дополнение: Видимо, исправление было преждевременно и CVE-идентификатор будет помечен как отозванный, так как для атаки недостаточно передачи определённого JSON-содержимого и требуется, чтобы функции был передан готовый объект, чего нереалистично добиться без изменения кода приложения.
| ||
Обсуждение (54 +7) |
Тип: Проблемы безопасности |
| ||
· | 04.01 | Вышла новая LTS-версия менеджера состояния Reatom (18 –10) |
Вышла новая LTS-версия Reatom 3, менеджера состояния для веб-приложений, работающих по модели Flux. Проект может применяться в качестве альтернативы Redux. В новой ветке поменялось практически все, кроме ключевых принципов: работа в выделенном глобальном контексте и разделение на чистые вычисления и побочные эффекты (side-effect) для облегчения тестирования, разделение на атомы (atoms) и действия (actions) для DCI-подобного описания логики. Код написан на JavaScript и распространяется под лицензией MIT.
Нововведения:
| ||
· | 27.11 | Доступен Wasmer 3.0, инструментарий для создания приложений на базе WebAssembly (39 +4) |
Представлен третий значительный выпуск проекта Wasmer, развивающего runtime для выполнения модулей WebAssembly, который можно использовать для создания универсальных приложений, способных выполняться в разных операционных системах, а также для изолированного выполнения кода, не заслуживающего доверия. Код проекта написан на языке Rust и распространяется под лицензией MIT.
Возможность запуска одного приложения на разных платформах обеспечивается благодаря компиляции кода в низкоуровневый промежуточный код WebAssembly, который может запускаться в любых ОС или встраиваться в программы на других языках программирования. Программы представляют собой легковесные контейнеры, в которых выполняется псевдокод WebAssembly. Данные контейнеры не привязаны к операционной системе и могут включать код, изначально написанный на любом языке программирования. Для компиляции в WebAssembly может использоваться инструментарий Emscripten. Для трансляции WebAssembly в машинный код текущей платформы поддерживается подключение разных бэкендов компиляции (Singlepass, Cranelift, LLVM) и движков (задействование JIT или генерация машинного кода). Приложения изолированы от основной системы в sandbox-окружении и имеют доступ только к заявленной функциональности (механизм безопасности на основе управления возможностями - для действий с каждым из ресурсов (файлы, каталоги, сокеты, системные вызовы и т.п.) приложению должны быть даны соответствующие полномочия). Управление доступом и взаимодействие с системой обеспечивается при помощи API WASI (WebAssembly System Interface), предоставляющем программные интерфейсы для работы с файлами, сокетами и другими функциями, предоставляемыми операционной системой. Платформа позволяет добиться производительности выполнения приложений, близкой к выполнению родных сборок. При помощи Native Object Engine для WebAssembly-модуля можно сгенерировать машинный код ("wasmer compile --native" для генерации предкомпилированных объектных файлов .so, .dylib и .dll), для запуска которого требуется минимальный runtime, но сохраняются все возможности sandbox-изоляции. Возможна поставка предкомпилированных программ со встроенным Wasmer. Для создания надстроек и дополнений предлагаются Rust API и Wasm-C-API. Для запуска WebAssembly-контейнера достаточно установить в системе runtime Wasmer, который поставляется без внешних зависимостей ("curl https://get.wasmer.io -sSfL | sh"), и запустить необходимый файл ("wasmer test.wasm"). Программы распространяются в форме обычных WebAssembly-модулей, для управления которыми можно использовать пакетный менеджер WAPM. Wasmer также доступен в форме библиотеки, которую можно использовать для встраивания кода WebAssembly в программы на языках Rust, С/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir и Java. Основные изменения в Wasmer 3.0:
| ||
Обсуждение (39 +4) |
Тип: Программы |
| ||
· | 14.11 | В JavaScript-платформе Deno обеспечена совместимость с модулями NPM (67 +11) |
Представлен выпуск Deno 1.28, платформы для обособленного выполнения приложений на языках JavaScript и TypeScript, которая может быть использована для создания обработчиков, работающих на сервере. Платформу развивает Райан Даль (Ryan Dahl), создатель Node.js. Как и в Node.js в Deno используется JavaScript-движок V8, который также применяется в браузерах на основе Chromium. При этом Deno не является ответвлением от Node.js, а представляет собой созданный с нуля новый проект. Код проекта распространяется под лицензией MIT. Сборки подготовлены для Linux, Windows и macOS.
Проект Deno был создан для предоставления пользователям более защищённого окружения и устранения концептуальных ошибок, допущенных в архитектуре Node.js. Для повышения безопасности обвязка вокруг движка V8 написана на языке Rust, позволяющем избежать многих уязвимостей, возникающих из-за низкоуровневой работы с памятью. Для обработки запросов в неблокирующем режиме применяется платформа Tokio, также написанная на языке Rust. Tokio позволяет создавать высокопроизводительные приложения на основе событийно-ориентированной архитектуры (Event-driven), поддерживающие многопоточность и обработку сетевых запросов в асинхронном режиме. Ключевым изменением в новом выпуске является стабилизация совместимости с пакетами, размещёнными в репозитории NPM, что позволяет использовать в Deno более 1.3 млн модулей, созданных для платформы Node.js. Например, в приложениях на базе Deno теперь можно использовать такие модули для организации постоянного доступа к данным, как Prisma, Mongoose и MySQL, а также фреймворки для обеспечения работы фронтэндов, такие как React и Vue. Некоторые NPM-модули пока остаются несовместимыми с Deno, например, из-за привязок к специфичным для Node.js элементам окружения, таким как файл package.json. Также пока невозможно использовать команду "deno compile" с модулями NPM. В будущих выпусках планируется устранить подобные несовместимости и ограничения. Поддержка ранее применяемой в Deno модели на основе системы модулей ECMAScript и Web API сохранена на том же уровне и для импорта модулей NPM используется привычная для Deno схема загрузки на основе URL. Для обращения к модулям NPM предусмотрен специальный URL-префикс "npm:", который может использоваться по аналогии с обычными модулями Deno. Например, для импорта NPM-модуля можно указать 'import { chalk } from "npm:chalk@5";', а для запуска NPM-скрипта из командной строки - "deno run --allow-env --allow-read npm:create-vite-extra". Использование NPM-пакетов в Deno значительно проще, чем в Node.js, так как нет необходимости предварительной установки модулей (модули устанавливаются при первом запуске приложения), не используется файл package.json, а также не используется по умолчанию каталог node_modules (модули кэшируются в общем каталоге, но есть возможность возвращения старого поведения при помощи опции "--node-modules-dir"). В приложениях на базе NPM сохраняется возможность использования предоставляемых в Deno механизмов разграничения доступа, изоляции и активации влияющих на безопасность расширенных возможностей. Для противодействия проведению атак через сомнительные зависимости Deno блокирует по умолчанию все попытки получения доступа к системе из зависимостей и выводит предупреждение о выявленных проблемах. Например, при попытке модуля получения доступа на запись в /usr/bin/ будет выведен запрос подтверждения данной операции: deno run npm:install-malware ⚠️ ┌ Deno requests write access to /usr/bin/. ├ Requested by `install-malware` ├ Run again with --allow-write to bypass this prompt. └ Allow? [y/n] (y = yes, allow; n = no, deny) > Из не связанных в NPM улучшений в новой версии упоминается обновление движка V8 до выпуска 10.9, автоматическое определение файлов с блокировками, стабилизация API
Deno.bench(), Deno.gid(), Deno.networkInterfaces(),
Deno.systemMemoryInfo() и Deno.uid(), добавление нового нестабильного API Deno.Command() для запуска команд (универсальная замена Deno.spawn, Deno.spawnSync и Deno.spawnChild).
Основные особенности Deno:
| ||
Обсуждение (67 +11) |
Тип: Программы |
| ||
· | 03.11 | В NPM включена обязательная двухфакторная аутентификация для сопровождающих значимых пакетов (21 –7) |
GitHub расширил применение в репозитории NPM обязательной двухфакторной аутентификации, которая отныне станет применяться к учётным записям разработчиков, сопровождающих пакеты, насчитывающие более 1 млн загрузок в неделю или используемые в качестве зависимости у более 500 пакетов. Ранее двухфакторная аутентификация была обязательной только для сопровождающих 500 самых популярных NPM-пакетов (по числу зависимых пакетов).
Сопровождающие значимых пакетов теперь смогут выполнить связанные с внесением изменений операции с репозиторием только после включения двухфакторной аутентификации, требующей подтверждения входа при помощи одноразовых паролей (TOTP), генерируемых такими приложениями, как Authy, Google Authenticator и FreeOTP, или аппаратных ключей и биометрических сканеров, поддерживающих протокол WebAuth.
| ||
Обсуждение (21 –7) |
| ||
Следующая страница (раньше) >> |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |