
Один человек, 25 лет, 20 миллиардов устройств: история cURL
В 1996 году шведский программист решил, что его IRC-боту нужны свежие курсы валют. Чтобы их скачивать, он написал маленькую утилиту. Сегодня эта утилита работает в вашем телефоне, телевизоре, автомобиле, игровой приставке — и ещё в двадцати миллиардах устройств по всему миру.
Это история о том, как хобби одного человека стало фундаментом современного интернета. История о терпении, упрямстве и двух часах после полуночи.
Мальчик с Commodore 64
Даниэль Стенберг родился 23 ноября 1970 года в Худдинге — тихом пригороде Стокгольма. Детство было совершенно нецифровым: мама — художница, папа работал в строительстве, сам Даниэль гонял в футбол и любил математику. Ничто не предвещало.
Всё изменилось в начале восьмидесятых, когда он увидел у друга Commodore 64. Это была любовь с первого взгляда — та самая, которая определяет жизнь. Четырнадцатилетний Даниэль вместе с младшим братом Бьёрном начал копить деньги. Каждую крону. В 1985 году они наконец купили свой первый компьютер.
Дальше — демосцена. Кто помнит то время, тот знает: это была особая субкультура, где подростки соревновались, кто выжмет из железа больше. Демки, игры, ассемблер, copy-parties с группами вроде Triad и Fairlight. Стенберг писал код ночами, учился думать эффективно и делать невозможное на ограниченных ресурсах.
Демосцена учит двум вещам: во-первых, красота возможна даже в жёстких ограничениях; во-вторых, код — это форма самовыражения, которую можно дарить миру. Оба урока пригодились.
Бот, которому нужны были курсы валют
Конец 1996 года. Стенбергу двадцать шесть. Он уже взрослый программист, работает днём, а по вечерам возится с проектами для души. Один из них — IRC-бот для канала, посвящённого компьютерам Amiga. Тёплое ламповое комьюнити энтузиастов, которые ещё не знают, что их платформа умирает.
Боту нужна была полезная функция. Даниэль решил: пусть конвертирует валюты. Практично — люди в чате со всего мира, курсы нужны постоянно. Но для этого нужны актуальные данные. А данные лежат на каком-то сайте. Значит, нужен инструмент, который будет их скачивать.
Стенберг нашёл в сети маленькую утилиту httpget, написанную бразильским разработчиком Рафаэлем Сагулой. Несколько сотен строк кода. Программа делала ровно одно: скачивала файл по HTTP. Почти то, что нужно — только требовалось кое-что подправить.
Даниэль подправил. Потом ещё. Потом ещё. Сагула был рад отдать поддержку проекта человеку, который явно горел идеей. 17 декабря 1996 года вышла версия 0.2 — первый релиз, сделанный Стенбергом.
Он тогда не знал, что это начало многолетнего пути.
Три имени одной программы
Дальше началась эволюция. Медленная, органическая, без грандиозных планов.
httpget умел только HTTP. Но Стенберг быстро добавил поддержку Gopher — помните такой протокол? Название программы стало неточным. В апреле 1997 года вышла версия 1.0 с поддержкой HTTP-прокси.
В августе 1997 года появилась поддержка FTP. Программа явно переросла своё имя. Новое название — urlget — отражало суть: качаем по URL, неважно какой протокол.
Но и это продержалось недолго. Стенберг добавил возможность не только скачивать, но и загружать данные. «Get» в названии превратилось во враньё. К тому же в сети нашлись другие утилиты с именем urlget — путаница.
Нужно было что-то универсальное. Что-то, что не придётся менять снова.
20 марта 1998 года мир увидел curl 4.0. Название расшифровывается как «Client for URL» — клиент для URL. Не скачивание, не загрузка — просто работа с адресами. Универсально и честно.
Почему версия 4.0, а не 1.0? Стенберг сохранил нумерацию от предыдущих воплощений. Странное решение, но он никогда не был перфекционистом в мелочах. Только в коде.
2200 строк. 24 параметра командной строки. Поддержка HTTP, Gopher и FTP.
На сайте проекта красовалась гордая надпись: «Скачано более 300 раз».
Почему C
Есть вопрос, который Стенбергу задают постоянно: почему curl написан на C? Почему не переписать на что-то современное — Rust, Go, что угодно?
Ответ прост и безжалостен: портативность.
В девяностых C был единственным выбором для создания по-настоящему переносимой библиотеки. C++ ещё не имел стабильного ABI — Application Binary Interface набора правил о работе скомпилированного кода. Поэтому других вариантов не существовало.
Но дело не только в истории. C-компиляторы есть для любой платформы. Любой операционной системы. Любой процессорной архитектуры. Это язык, который работает везде — от мейнфреймов до микроконтроллеров.
curl написан на C89 — стандарте 1989 года, древнем и консервативном. Это сознательный выбор. Чем старше стандарт, тем больше компиляторов его поддерживают, тем больше платформ доступно.
Результат: curl работает на 110 операционных системах и 28 процессорных архитектурах. Ни один другой язык не дал бы такого охвата.
А что насчёт безопасности? Да, около половины уязвимостей curl — это типичные ошибки работы с памятью в C. Стенберг это признаёт. Но переписывать 180 000 строк кода — безумие.
«Мы не собираемся переписывать curl на Rust. Или на любом другом языке. Мы вообще не собираемся его переписывать, — говорит он. — Он уже существует».
Перевод старой, стабильной, проверенной кодовой базы на новый язык неизбежно породит новые баги. Баги, которых сейчас нет. Годы работы, чтобы получить менее надёжный продукт — плохая сделка.
Вместо этого curl использует компоненты, написанные на Rust, как опциональные бэкенды. Библиотеки Quiche и Hyper можно подключить для работы с HTTP. Прагматичный компромисс вместо идеологического крестового похода.
«Мы не поддаёмся модным веяниям. Мы сидим в лодке спокойно. Не раскачиваем её».
300 скачиваний — и тишина
Первые годы curl развивался тихо. Очень тихо.
В августе 1998 года появилась поддержка SSL. В октябре — cookies. Код перевалил за 4000 строк, и Стенберг сменил лицензию с GPL на MPL: хотелось, чтобы curl могли использовать все, включая проприетарные проекты.
В декабре 1998 года вышел curl 5 с первой man-страницей. Люди начали делать RPM-пакеты.
1999 год: поддержка LDAP и FILE. В мае — первый Debian-пакет. В августе сайт набирал 1300 посещений в неделю. В сентябре — curl 6.0, уже 15 000 строк. В декабре проект переехал на SourceForge.
Всё это время Стенберг работал днём на обычной работе. curl оставался хобби. Никаких грандиозных амбиций — просто интересная задача, которая затягивала всё глубже.
Переломный момент наступил 7 августа 2000 года.
Рождение libcurl
В этот день Стенберг выпустил curl 7.1 — первую версию с отделённой библиотекой libcurl.
До этого curl был только командной утилитой. Хотите использовать его из своей программы? Вызывайте через shell, парсите вывод. Костыли и боль.
libcurl изменила всё. Теперь любой разработчик мог встроить возможности curl прямо в своё приложение. Чистый API, никаких внешних вызовов.
Первыми это оценили разработчики PHP. У них было много пользователей, много сценариев использования, много идей. Они начали присылать баг-репорты, предложения, патчи. Проект ожил.
«Это росло не как ракета, — вспоминает Стенберг. — Скорее постепенно набирало популярность. Люди начинали использовать, рассказывали другим».
В сентябре 2001 года curl появился в Mac OS X 10.1. К этому моменту он уже был стандартом в большинстве дистрибутивов Linux.
Тихо, без фанфар, без маркетинговых бюджетов, curl становился частью инфраструктуры.
А потом инфраструктура начала расти.
Два часа после полуночи
Как совмещать работу, семью и проект, который требует постоянного внимания?
У Стенберга был секрет. Простой и жестокий.
Семья ложилась спать — сначала дети, потом жена. А Даниэль понимал, что ему нужно меньше сна, чем им. Каждый вечер, когда дом затихал, он поднимался в кабинет на втором этаже. Садился за компьютер. И работал над curl.
Два часа. Каждый день. На протяжении десятилетий.
Два часа кажутся мелочью. Но два часа ежедневно в течение семнадцати лет — это больше тринадцати тысяч часов. Достаточно, чтобы превратить игрушку для IRC-бота в программу, без которой не работает интернет.
Днём — контрактная работа, embedded-разработка. Это приносило деньги. Вечером — curl, open source, протоколы. Это приносило смысл.
«Я вёл curl как проект для души все эти десятилетия, — вспоминал Стенберг. — С годами всё чаще случалось так, что люди, которые присылали баг-репорты или просили помощи, делали это в рабочее время — потому что использовали curl в коммерческих проектах. Ситуация становилась почти абсурдной: те, кому платили за работу с curl, просили помощи у тех, кому не платили».
Двадцать миллиардов
Сегодня curl работает в автомобилях, телевизорах, роутерах, принтерах, аудиотехнике, телефонах, планшетах, медицинских приборах, приставках, компьютерных играх и медиаплеерах. По оценкам проекта, это более двадцати миллиардов установок.
Как считали? Грубо, но логично.
В мире семь миллиардов смартфонов и миллиард планшетов. iOS идёт с curl из коробки — это 1,3 миллиарда активных устройств Apple. Android-версии Samsung, Xiaomi и OPPO тоже включают curl. Каждое устройство содержит не одну копию, а несколько — разные приложения тащат свои версии библиотеки.
Современные автомобили — это компьютеры на колёсах. Им нужно качать обновления, отправлять телеметрию, синхронизировать навигацию. Ford, Hyundai, Dacia, Holden — все используют libcurl.
В мире 760 миллионов телевизоров, подключённых к интернету. Netflix использует libcurl на всех устройствах, которые не браузеры — а 70 % зрителей смотрят именно с телевизоров. Библиотека не стримит само видео, но управляет интерфейсом и метаданными.
Apple встраивает curl в macOS и iTunes. Google — в Chrome OS, Google Earth, приложение YouTube. Facebook и Yahoo используют PHP с libcurl на бэкенде. Миллиарды запросов в секунду.
И всё это создал один человек. В свободное от работы время. После того как семья ложилась спать.
Скучная суперсила
110 операционных систем. 28 процессорных архитектур. 25 с лишним сетевых протоколов. 271 публичный релиз за 25 лет. 273 параметра командной строки. 160 000 строк кода. 3534 контрибьютора.
Но главная суперсила curl — не в цифрах. Главная суперсила — в скуке.
То, что работало в curl пятнадцать лет назад, работает и сегодня. Тот же API. Тот же ABI. Те же параметры командной строки. Можно взять скрипт из 2005 года — и он запустится.
Это сознательная философия: не гнаться за модой, сидеть в лодке спокойно, не раскачивать. Внутренности curl переписывались многократно — рефакторинг, оптимизация, новые протоколы. Но снаружи всё выглядит так же.
«Скучный стек — хороший стек. curl делает своё дело и не мешает».
Стенберг считает это секретной суперсилой проекта — стабильность во всех смыслах слова. Пользователи могут положиться на curl. Он не подведёт, не изменится без предупреждения, не сломает ваш продакшен в пятницу вечером.
Пять лет в Mozilla
В январе 2014 года Стенберг устроился в Mozilla.
Это было естественное продолжение: Firefox — один из крупнейших потребителей сетевых протоколов в мире. HTTP/2 только появлялся на горизонте, и Mozilla была одним из двигателей его развития. Кто лучше Стенберга мог работать над HTTP-стеком браузера?
В Mozilla он получил опыт работы с «иногда десятилетней запутанной кодовой базой на C++, спагетти-армадой тредов и диким западом пользователей интернета». Бо́льшая часть работы над HTTP/2 велась именно в этот период.
Важнее другое: Mozilla позволяла тратить часть рабочего времени на curl. Компания фактически спонсировала проект, давая главному разработчику возможность заниматься им не только ночами.
11 декабря 2018 года Стенберг ушёл. Без скандалов, без драмы — просто настало время двигаться дальше. На тот момент он ещё не знал, что будет делать. Были идеи, были разговоры с друзьями и компаниями, но ничего определённого.
А потом позвонили из wolfSSL.
Мечта сбывается
1 февраля 2019 года Стенберг начал работать в wolfSSL.
wolfSSL — компания, занимающаяся криптографией и TLS. Им нужна была тесная интеграция с curl, а кто мог обеспечить её лучше создателя? Они предложили ему работу мечты: заниматься curl full-time. За зарплату.
«Это фантастическая возможность и для сообщества, и для коммерческих пользователей, — сказал тогда Стенберг. — Теперь я могу тратить больше времени на улучшение curl. Сообщество увидит больше фич, и быстрее».
wolfSSL начала предлагать коммерческую поддержку curl. Разные тарифы: от $2000 в год за базовую поддержку до $50 000 за круглосуточную. Для компаний, которым нужны гарантии, фиксированное время отклика, кастомная интеграция.
«Присоединение к wolfSSL — это не просто смена работодателя. Это изменило всё для меня, — писал Стенберг пять лет спустя. — Работать над curl full-time — это моё определение жизни мечты».
Двадцать один год исполнилось проекту, когда создатель смог работать над ним за зарплату. Двадцать один год ночных часов, посвящённых работе над curl.
«Проект определяет меня и мою карьеру, — говорит Стенберг. — Это моя жизнь».
Человек, которого не пустили в Америку
В июне 2017 года Стенберг собирался на конференцию в Сан-Франциско. Обычная рабочая поездка — он работал в Mozilla, часто летал в США, имел действующую ESTA и паспорт.
На стойке регистрации в Стокгольме что-то пошло не так.
«Сотрудница увидела что-то на экране, когда вводила мои данные», — рассказывал он потом. Ему отказали в посадке. Без объяснений.
Последний раз он был в США в декабре 2016 года — с тем же ESTA, тем же паспортом. Всё работало. А теперь — нет.
Стенберг предположил причину: «Вероятно, кто-то где-то нашёл моё имя и мой код в каком-то вредоносном ПО и сделал неправильные выводы о том, как мой код там оказался. Например, в малвари или вирусе. Я делаю инструменты и код доступными бесплатно, и иногда их, к сожалению, используют не так, как я хотел бы».
История получила резонанс. Сам Брэд Смит, главный юрист Microsoft, написал Стенбергу в Twitter, предложив юридическую помощь.
В апреле 2018 года ему официально отказали в ESTA. Он подал на обычную визу. Ответа не было больше двух лет.
6 ноября 2020 года — через 934 дня — пришла посылка из посольства США. Виза.
Человек, чей код работает в миллиардах американских устройств, два с половиной года не мог въехать в страну.
Классический open source
curl — это образец «олдскульного» open source.
Нет корпорации-хозяина. Нет венчурных денег. Нет маркетингового отдела. Нет роадмапа, спущенного сверху.
Есть списки рассылки, обсуждения, предложения. Кто приносит код — тот и решает. В 2010 году проект переехал на GitHub, в 2015-м полностью перешёл на pull request’ы — но философия не изменилась. Маленькое сообщество, горизонтальная структура, решения принимаются в дискуссиях.
Когда Стенберг начинал, термина «open source» ещё не существовало — его придумали в начале 1998 года, за несколько недель до первого релиза curl. Тогда это называлось просто «свободный код». Стенберг был впечатлён количеством бесплатного софта в сети и хотел стать частью этой культуры.
«Я знал, что для успеха hobby-проекта нужно сделать его открытым — чтобы другие могли помочь», — вспоминает он.
Сегодня Стенберг — президент European Open Source Academy. Он выступает на конференциях, объясняет политикам и бизнесменам, почему инфраструктура интернета держится на добровольцах. Пишет книги — «Everything curl» доступна бесплатно онлайн.
«Признание моей работы в большом мире, за пределами узкого круга инженеров, — редкость. И это огромно. Я чувствую себя польщённым и смущённым одновременно».
Цена славы
Всё имеет свою цену.
В последние годы Стенберг столкнулся с новой проблемой: поток мусорных баг-репортов, сгенерированных искусственным интеллектом.
Схема простая: человек скармливает код curl нейросети, просит найти уязвимости, получает список «проблем» — и бездумно копирует его в трекер. Нейросеть галлюцинирует, выдумывает несуществующие баги, путает функции. А разбираться с этим мусором приходится Стенбергу.
На каждый такой отчёт уходят часы. Нужно прочитать, понять, что имелось в виду, проверить код, написать ответ. Умножьте на десятки отчётов в неделю.
Даниэль ввёл обязательный чекбокс при создании issue: подтвердите, что это не AI-генерация. Написал правила использования нейросетей. Начал банить особо настойчивых отправителей.
«Я понимаю, что AI-инструменты становятся популярнее. Но это не значит, что можно перекладывать на меня работу по сортировке мусора».
За двадцать семь лет он видел всё: взлёты интернета, пузыри и кризисы, смену парадигм. HTTP превратился из одного из протоколов в протокол, на котором строится всё. Интернет из нишевой игрушки стал хребтом цивилизации.
А curl — одним из его позвонков.
Награды
Долгое время Стенберг оставался невидимкой. Curl: Used by Millions, Recognized by None — «Используется миллионами, не узнан никем». Так называлась статья 2016 года.
Потом мир начал замечать.
В октябре 2017 года — премия Польхема, одна из старейших технических наград Швеции, «за инновационное решение технической проблемы». На церемонии король Швеции лично вручил Стенбергу золотую медаль.
Через несколько месяцев того же Стенберга не пустили в Америку.
Сентябрь 2025 года — звание «Разработчик года» в Швеции.
Октябрь 2025 года — золотая медаль Шведской королевской академии инженерных наук. Формулировка: «За выдающийся вклад в развитие программного обеспечения, где он сыграл центральную роль в создании интернет-инфраструктуры и open source».
Двадцать семь лет. От IRC-бота с курсами валют до королевской медали.
Что остаётся
Можно построить что-то огромное, не создавая стартап и не привлекая инвестиции. Можно изменить мир, работая по два часа в день после того, как дети уснут.
Нужны три вещи: интересная задача, готовность решать её годами и понимание, что результат важнее признания.
Стенберг говорит, что развитие curl шло параллельно с развитием самого интернета. В девяностых интернет был нишей для гиков. Сегодня — основой общества. HTTP из одного из протоколов стал протоколом, на котором строится почти всё.
curl рос вместе с этим миром. Не потому что Стенберг хотел славы или денег. А потому что задача была интересной — и остаётся интересной даже спустя двадцать семь лет.
Он до сих пор живёт в том же пригороде Стокгольма. Жена, двое детей, дом. Зимой — лыжи. Летом — каяки. Регулярно — флорбол. Жизнь за пределами кода.
А когда семья засыпает — он поднимается в кабинет на втором этаже.
Иногда этого достаточно.
Если хотите узнать больше — у Стенберга есть бесплатная книга «Everything curl». Она не только о программе, но и о том, как устроен интернет. И о том, как один человек может стать частью его инфраструктуры.