Это история о самом невероятном демо, которое я видел в мире open source. Такого просто невозможно придумать.

В 2005 году я находился в гуще событий. Я работал независимым консультантом по производительности, а Sun Microsystems только что выпустила DTrace — продукт, способный инструментировать любое ПО. Он давал аналитикам производительности функцию «рентгеновского зрения». Занимаясь написанием и публикацией расширенных инструментов исследования производительности на основе DTrace (моего опенсорсного DTraceToolkit и других инструментов DTrace, то есть скриптов), я заметил нечто странное: я публиковал больше инструментов DTrace, чем выпускала сама Sun. Вероятно, есть какой-то внутренний проект, в котором заняты все люди, хорошо знающие DTrace?


Инструменты DTraceToolkit v0.96 (2006 год)

Так как я не был сотрудником Sun Microsystems, меня не посвящали во внутренние проекты компании. Однако я занимался обучением и консультированием для Sun, помогая клиентам компании с администрированием и производительностью систем. Иногда Sun приглашала меня на свои совещания с клиентами и другие мероприятия, которые были бы мне интересны как местному специалисту. Тогда я жил в Сиднее (Австралия).

Однажды мне сказали, что из США приезжает очень важный человек, с которым мне интересно было бы встретиться. Не помню имени, но мне сказали, что это специалист по DTrace и разработчик из Sun, который летает по миру и рассказывает о новом продукте Sun на основе DTrace. Ага! Наверно, тот самый внутренний проект!

Но это должен быть неординарный проект. Я видел некоторые из потрясающих технологий Sun, но никогда не слышал, чтобы разработчик путешествовал с мировым турне. Он будет очень крутым, и, скорее всего, не оставит камня на камне от моих предыдущих проектов DTrace.

Этот VIP возвращался на несколько дней в Сидней перед поездкой в следующий австралийский город, поэтому мы договорились встретиться в сиднейском офисе Sun.

Встреча


Специалист DTrace прибыл в стандартном бизнес-костюме, в его голосе слышен был сильный американский акцент. Было видно, что его немного утомило мировое турне. Он только что прилетел из ЮАР и Новой Зеландии, и перечислил другие страны и города, в которые поедет дальше. К нашей встрече присоединились ещё два австралийских сотрудника Sun. Один из них представил меня:

«Брендан ведёт у нас курсы и он занимался проектами по DTrace».

Такое скромное представление — норма для Австралии (особенно для австралийцев), и я задумался, а понимает ли он это культурное различие. Ещё одно различие заключалось в том, что в 2005 году в Австралии, в отличие от США, было довольно мало должностей для инженеров. Например, все сотрудники Sun Microsystems Australia занимались поддержкой, но не разработкой, а другие технологические гиганты на рынке ещё не появились. То есть в те времена в Австралии потрясающие инженеры хватались за любую доступную работу.

Я попытался подробнее объяснить, что подразумевается под «работал», сказав, что написал DTraceToolkit, но его это не впечатлило. Он не знал моего имени и никогда не слышал о DTraceToolkit. Для него я был просто случайным человеком.

Однако он любезно согласился показать мне небольшое демо. Его продукт на основе DTrace был дополнением к крупному Sun GUI, с которым я уже был знаком. После загрузки он показал, как можно запускать один из нескольких инструментов DTrace двойным нажатием на значок. Инструмент мог или выводить в отдельном окне сырые данные, или отображать результаты в виде линейного графика. Это казалось довольно посредственным. В GUI уже была эта функциональность, и я надеялся на новые функции GUI.

Единственной новинкой оказались сами инструменты, которых было довольно много. Он вкратце рассказал о том, какие новые потрясающие возможности наблюдения они предоставляют (скорее всего, он уже много раз говорил это, стараясь впечатлить клиентов). У меня сложилось ощущение, что он не ждал, что я целиком оценю их ценность.

Но я на самом деле разбирался в этих инструментах, потому что кодил схожую функциональность для своего DTraceToolkit. Они были полезными… но я-то ожидал целого водопада потрясающих новых функций DTrace.

«Я уже делал подобное, я сам писал инструменты, которые выполняют эти функции!»

«Ну да, конечно», — он не ответил так, но его взгляд был красноречивым — он не верил мне и не считал, что я полностью осознаю их необходимость. Это была важная инновация американской многонациональной компании Sun Microsystems, стоившей миллиарды долларов. А я был просто каким-то обычным австралийцем.

Трейсинг сокетов


Я поискал среди значков GUI что-нибудь новое для себя, и самым интересным оказался инструмент для трейсинга ввода-вывода сокетов. Я пробовал работать с ним в 2004 году (socketsnoop.d) и опубликовал получившийся результат в open source, но мой инструмент был несовершенным: у меня не было полного доступа к исходному коду ядра, поэтому мне с трудом приходилось разбираться самостоятельно путём анализа «чёрного ящика». Он работал с большинством типов TCP-трафика, но не с другими, о чём я сообщил в комментариях к скрипту. Кроме того, я не добавил его в DTraceToolkit, потому что не считал инструмент завершённым. Поэтому из всех его инструментов наиболее интересным для меня был этот. Sun могла справиться гораздо лучше, ведь у неё был исходный код, и доделать этот инструмент.

«Можно посмотреть скрипт ввода-вывода сокетов?», — я открыл терминал. Поначалу разработчик выглядел озабоченным, как будто мне нельзя было позволять заглядывать за кулисы, но потом он понял, что это ещё одна продающая «фишка» продукта: «Да, конечно, вы даже можете добавлять в GUI новые инструменты!». После паузы он добавил: «Если, конечно, они у вас есть». Они у меня есть, это уж точно. Он сказал мне путь, по которому нужно искать, и спустя какое-то время я добрался до папки со всеми инструментами, которые он демонстрировал.

Все инструменты имели знакомые названия. Один даже назывался socketsnoop.d. У меня зародились подозрения.

Не может быть.

Я вывел на печать socketsnoop.d. На экране появился мой собственный скрипт. Это была та самая незавершённая попытка, которую я предпринял годом ранее и опубликовал как open source. В нём находился странный код, который в то время казался мне логичным (использование PFORMAT до defaultargs) и он был написан в моём прежнем стиле. Я читал мой скрипт.

«Это МОЙ скрипт».

Я открыл ещё несколько инструментов, и везде видел то же самое — все они были моими. Этот потрясающий новый продукт Sun, который мистер VIP рекламировал по всему миру, на самом деле состоял из моих собственных инструментов в open source.

У меня отвисла челюсть. Но он, похоже, мне не поверил.

Так делать нельзя


С помощью grep я поискал во всех инструментах своё имя, которое было указано в первом комментарии ко всем моим инструментам, чтобы доказать, что они мои. Но я ничего не нашёл. Моё имя удалили.

В некоторых из инструментов даже была строка:

# Author: Brendan Gregg  [Sydney, Australia]


И теперь этот человек приехал в Сидней и пытается продать инструменты Брендана Грегга Брендану Греггу.

Один из австралийских сотрудников Sun прервал меня: «Там везде стоит копирайт Sun Microsystems». В большинстве моих инструментов присутствовал мой копирайт и лицензия GPLv2 или CDDL. Но в этих было только стандартное сообщение о копирайте Sun, а лицензии open source оказались вырезанными.

«Вы удалили моё имя! И копирайты с лицензиями!»

Второй австралиец сказал гостю: «Так делать нельзя». В комнате воцарилось молчание, все присутствующие пытались осмыслить произошедшее. Пока одни люди в Sun мотивировали разработчиков вносить вклад в open source и создавать сообщество, другие обкрадывали это сообщество. Брали его работу, меняли лицензии и копирайты, а затем продавали её.

Гость был не готов к такому и выглядел озадаченным. Он оставался немногословным, только сказал, что не понимает, как такое произошло, что ему уже могли передать инструменты в таком виде (читай: не вините меня). Казалось, что он только отчасти верит нашим словам.

Встреча быстро завершилась. Я предложил ему взять более новые копии моих инструментов непосредственно из DTraceToolkit, потому что эти прежние версии с моей домашней страницы уже устарели, и с тех пор я устранил в них несколько ошибок. Также я напомнил ему, что нужно оставить во всех них моё имя, копирайт и лицензию.

В его защиту могу сказать, что встреча могла пройти иначе, если бы меня представили более обстоятельно. Это культурная проблема Австралии (принцип «не высовывайся»). Для австралийца представление человека в американском стиле может звучать хвастовством, но оно может быть и полезным как быстрый способ сообщить о специализации человека.

Другие случаи


Я не мог поверить, что из всех опубликованных мной в open source инструментов в продукт добавили socketsnoop.d. Эта программа была сырой. Позже я написал гораздо более качественные инструменты для работы с сокетами (в своих книгах о DTrace и BPF).

Несколько лет спустя Apple добавила множество моих инструментов в OS X. Компания оставила там моё имя, копирайт и open-source-лицензию CDDL, и даже улучшила некоторые из них. Годы спустя Oracle сделала то же самое для Oracle Solaris 11, а сообщество BSD — для FreeBSD. Я благодарю всех этих людей.

Вы можете сказать, что это сделала не компания Sun, а какой-то отдельный небрежный человек. Но в культуре Sun было нечто, стимулирующее к подобной небрежности. Мы с коллегами-консультантами уже сталкивались с подобным: с верой в то, что Sun и только Sun может наилучшим образом использовать её собственные технологии, а всё, созданное за пределами Sun, было мусором. Когда эти сотрудники Sun нашли что-то хорошее, у них была склонность считать, что это создано Sun, а значит это можно спокойно использовать и ребрендировать (и изменить лицензию), потому что они считали, что компания уже владеет правами на копирование.

В Sun были и другие люди, стремившиеся поступить со мной и мой работой правильно. По крайней мере, четыре раза мой DTraceToolkit встраивали в продукты для наблюдения за ПО, и лицензии при этом не вырезали. (В одном из случаев его хотели перелицензировать под GPL, и мы с юридическим отделом Sun обсуждали ситуацию, но это уже другая история.)

К слову, тогда мне не в последний раз непреднамеренно пытались продать мою же работу, это был только первый случай. Я научился не говорить продажникам, что сам создал то, что они пытаются мне продать, потому что потом они начинали смотреть на меня, как на сумасшедшего. Вместо этого я просто говорил: «У меня большой опыт работы с этой технологией», и ограничивался этим.

Я вспомнил об этом первом случае, потому что мои инструменты BPF теперь начинают появляться в продуктах для наблюдения за ПО, а со временем станут гораздо масштабнее, чем инструменты DTrace. В будущих постах я напишу об этом подробнее, а пока советую разработчикам следующее: пожалуйста, не переписывайте мои инструменты BPF и библиотеки bcc; пытайтесь надстраиваться над ними (в версиях bcc Python или bcc libbpf-tool) и получайте регулярные обновления. Причина заключается в том, что это ещё разрабатываемые продукты, и их переписывание (форкинг) приведёт к распылению усилий разработчиков и заставит ваши клиентов пользоваться устаревшими версиями.

(С моим ПО для создания flame-графиков ситуация другая: так как это простой и готовый алгоритм, не требующий особой поддержки, я не вижу особой проблемы в том, чтобы его переписывали другие. Однако не повредит и ваша благодарность, как я высказал благодарность тем, кто вдохновил меня на создание flame-графиков.)

Что касается «невероятного демо»: это не был потрясающий продукт на основе DTrace, которого я ждал, услышав о мировом турне. На самом деле, это оказались мои собственные инструменты. Подозреваю, что многие разработчики open source рано или поздно узнаю?т, что их код ребрендируют. Но в моём случае обстоятельства были довольно необычными. Разработчик из США совершил мировое турне с ПО, которое написал не он, в том числе непреднамеренно провёл презентацию и демонстрацию его автору. Кажется, он меня даже не поблагодарил.



На правах рекламы


Мощные VDS с защитой от DDoS-атак и новейшим железом. Всё это про наши эпичные серверы. Создайте собственный тариф в пару кликов, максимальная конфигурация — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe.

Подписывайтесь на наш чат в Telegram.