Skip to content

Compare versions

From:To:
+33
11¶ # curl
22
33 **Что это.** Программа, которая скачивает что-нибудь из интернета и отдаёт обратно. Звучит скучно ровно до того момента, как понимаешь, где она стоит: в телевизорах, автомобилях, банкоматах и внутри почти каждого сайта.
44
55 **Возраст.** Первый коммит в репозитории — 29 декабря 1999 года, автор Daniel Stenberg, сообщение из двух слов: `Initial revision`. Он же ведёт проект сегодня. Двадцать семь лет одним человеком во главе — сама по себе редкая черта.
66
77 **Размер.** 42 700 звёзд, 7 300 форков на сентябрь 2026.
88¶ ## Привычки, описанные им самим
99
1010 Самое интересное: curl записал свои правила в [docs/CONTRIBUTE.md](https://github.com/curl/curl/blob/master/docs/CONTRIBUTE.md), и то, что видно в переписке, с этим текстом совпадает.
1111
1212 **Молчание считается отказом — и об этом предупреждают заранее:**
1313
1414 > As your changes are reviewed and discussed, you are expected to address any flaws pointed out and update accordingly. Otherwise your changes risk stalling and eventually being deleted without action... **We take lack of replies as a sign that you are not anxious to get your patch accepted and we tend to drop such changes.**
1515
1616 *От вас ждут, что вы ответите на замечания и поправите. Иначе изменения застрянут и в итоге будут удалены. Отсутствие ответов мы считаем признаком того, что вам не очень нужно принятие правки, и обычно такие изменения отбрасываем.*
1717
1818 Именно это и произошло 10 июля 2022-го с PR про IPFS: два месяца тишины — и закрытие. Не каприз мейнтейнера, а написанное правило.
1919
2020 **Некоторым правкам нужны голоса:**
2121
2222 > A pull request... might get labeled `needs-votes`... this pull request must also receive more "votes" of user support. More signs that people want this to happen.
2323
2424 *Правку могут пометить «нужны голоса»: помимо всех прочих проверок ей требуется поддержка пользователей — сообщения или «пальцы вверх».*
2525
2626 То есть у чужой фичи есть не только техническая планка, но и социальная.
2727
2828 **Новые фичи ждут окна:**
2929
3030 > For new features... we require that the *feature window* is open... typically a three week period that starts ten days after a previous release.
3131
3232 *Для новых возможностей требуется открытое «окно фич» — обычно три недели, начинающиеся через десять дней после очередного релиза.*
3333
3434 Это отчасти объясняет, почему поддержка IPFS шла восемнадцать месяцев: даже одобренная фича ждёт своей форточки.
3535¶ ## Привычки, видные по переписке
3636
3737 Наблюдения из [PR #8805](https://github.com/curl/curl/pull/8805) — 283 комментария за шестнадцать месяцев:
3838
3939 - **Отвечает быстро.** Первая реакция мейнтейнера — на следующий день после открытия.
4040 - **Отказ объясняет абзацами, а не ярлыком.** Три развёрнутых возражения за один день, каждое с причиной, а не «не подходит».
4141 - **Закрывает с приглашением вернуться.** «Feel free to reopen when things move again» — дверь закрыта, но не заперта.
4242 - **Требует документацию раньше кода.** Первое же замечание: нет документации и тестов — судить не о чем.
4343 - **Спорит открыто и без грубости.** Полтора года несогласия, две стороны не соглашаются два месяца подряд — ни одной резкости в адрес человека.
4444 - **Хранит авторские даты.** Коммит, влитый через восемнадцать месяцев и десятки ребейзов, сохранил дату написания.
4545
4646 **Что из этого следует для того, кто придёт со своей правкой.** curl не отшивает, но и не облегчает: он требует документации, тестов, ответов на замечания и терпения длиной в релизный цикл. Тот, кто выдерживает, попадает внутрь вместе со своим именем в истории.
47¶ ## Мелкие правила, по которым узнаẻтся свой
47+¶ ## Мелкие правила, по которым узнаётся свой
4848
4949 **Сообщение коммита пишется по шаблону**, и шаблон записан:
5050
5151 ```
5252 [область]: [короткая строка о главном эффекте]
5353
5454 [полное описание, не шире 72 колонок: почему сделано]
5555 ```
5656
5757 С тремя требованиями, которые многие проекты только подразумевают, а curl выписал: повелительное наклонение (**change**, а не «changed» и не «changes»), строчная буква в начале, никакой точки в конце. Первая строка должна годиться в список изменений релиза как есть.
5858
59 **Стиль кода проверяется машиной:** `make checksrc` до отправки. Оговорка честная — «проверяет не всẻ, но если ругается — значит работа есть».
59+ **Стиль кода проверяется машиной:** `make checksrc` до отправки. Оговорка честная — «проверяет не всё, но если ругается — значит работа есть».
6060
6161 **Право писать в репозиторий можно просто попросить:**
6262
6363 > Feel free to ask for this, if this is what you want. You are required to have posted several high quality patches first.
6464
6565 *Просите смело, если хотите. Сначала нужно прислать несколько хороших правок.*
6666
6767 Заметьте контраст: в той же истории человек не мог даже открыть свой закрытый PR — прав не хватило. Права здесь дают за сделанное, а не за намерение.
6868¶ ## Чего ждать, если придёте со своей правкой
6969
7070 Всё ниже — из [docs/CONTRIBUTE.md](https://github.com/curl/curl/blob/master/docs/CONTRIBUTE.md) самого проекта, а не из наших догадок. Практически это самая полезная часть карточки.
7171
7272 **Одна правка — одна беда.**
7373
7474 > It is annoying when you get a huge patch from someone that is said to fix 11 odd problems, but discussions and opinions do not agree with 10 of them.
7575
7676 *Раздражает, когда приходит огромная правка, которая якобы чинит одиннадцать проблем, но по десяти из них согласия нет.*
7777
7878 И отдельно — причина, которая вспомнится через годы: отдельные правки делают возможным поиск виноватого коммита пополам — «enable bisecting much better».
7979
8080 **Не шевелите чужое по дороге.**
8181
8282 > Remember that it is likely that other people have done changes in the same source files as you have… If you bring completely new functionality, try writing it in a new source file.
8383
8484 *Скорее всего, другие люди правили те же файлы… Новое лучше писать в новом файле.*
8585
8686 **Тест обязателен, и причина названа честно:**
8787
8888 > Every feature that is added should get at least one valid test case… If every submitter also posts a few test cases, **it does not end up a heavy burden on a single person**.
8989
90 *Каждая новая возможность обязана получить хотя бы один тест… Если каждый пришлẻт по паре тестов, это не ложится тяжёлым грузом на одного человека.*
90+ *Каждая новая возможность обязана получить хотя бы один тест… Если каждый пришлёт по паре тестов, это не ложится тяжёлым грузом на одного человека.*
9191
9292 А если тест написать нельзя — требуют объяснить, как именно вы проверяли.
9393
9494 **Про документацию говорят без пафоса:**
9595
9696 > Writing docs is dead boring and one of the big problems with many open source projects but **someone's gotta do it**.
9797
9898 *Писать документацию смертельно скучно, и это одна из больших бед открытых проектов, но кто-то должен.*
9999¶ ## Кто в кадре
100100
101101 Люди, встреченные в наших разборах этого проекта. Подробные карточки — в «Определителе».
102102
103103 - **bagder — Daniel Stenberg.** Ведёт curl с самого начала. В истории с IPFS: ответил на следующий день, закрыл по неактивности с приглашением, трижды за день сказал «нет», сам предложил выход и сам влил через полтора года.
104104 - **markg85 — Mark Gaiser.** Принёс поддержку `ipfs://`. Восемнадцать месяцев между датой написания коммита и датой вливания; 82 комментария из 283.
105105 - **lidel — Marcin Rataj**, Protocol Labs. Пришёл со стороны IPFS и выступил против того, чтобы шлюз его же команды стоял в curl по умолчанию.
106106 - **jzakrzewski — Jakub Zakrzewski.** Прохожий с идеей: зашёл со словами «a wild idea» и предложил компромисс, который в итоге и приняли.
107107 - **dfandrich — Dan Fandrich.** Через два дня после вливания починил пути к логам в новых тестах.
108108¶ ## Разборы, где встречается
109109
110110 - **«Две даты одного коммита»** — поддержка IPFS, спор о шлюзе по умолчанию, восемнадцать месяцев от написания до вливания.
111111
112112 ---
113113
114114 *Карточка собрана 01.09.2026 из открытых источников: репозиторий, документация проекта, переписка в PR. Фотографий и личных данных здесь нет и не будет. Нашли неточность или хотите, чтобы вас убрали, — напишите, поправим без вопросов.*