Поучаствовать в open source проекте. Как впервые принять участие в проекте Open Source

Открытое программное обеспечение стало двигателем инноваций. И в этой статье вы убедитесь в этом. Мы рассмотрим лучшие проекты OpenSource по версии премии Black Duck Open Source Rookies.

Это восьмой выпуск Black Duck Open Source Rookies. Каждый год, Black Duck рассматривает мир свободного программного обеспечения и находит лучшие новые Open Source проекты, которые были реализованы в этом году.

Большая часть проектов, получивших награду Black Duck разработана или финансирована коммерческими компаниями. Некоторые проекты - это дополнения к основной продукции спонсоров или внутренние ответвления, в то время как другие становятся поводом для развития этих основных проектов.

Как правило, у лауреатов премии наблюдается три тенденции в отрасли:

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

У RocketChat есть собственные приложения для Linux, Windows, MacOS, а также мобильные приложения для Android и iOS. Здесь даже есть собственное приложения для FirefoxOS, для настольных и мобильных устройств. А поскольку это Open Source проект, то это отличный выбор для разработчиков, жалеющих строить и развивать собственную платформу чата.

Mattermost

Другой отличной альтернативой для Slack есть Mattermost, ее история началась с компании - разработчика игр для HTML 5. Изначально это был игровой портал и приложение для обмена сообщениями, цель которого была найти геймеров за пределами Facebook. В итоге программа была переделана в решение для совместной работы в пределах компании, для таких случаев, когда компания не хочет, чтобы ее данные были получены провайдером. На данный момент - это отличная альтернатива Slack с открытым исходным кодом написанная на React и Go.

Mattermost объединяет все задачи коммуникации в одном месте, через удобный и интуитивно понятный интерфейс, удобный для поиска и доступный везде. Пользователи могут обмениваться сообщениями и файлами с помощью своих компьютеров и смартфонов, сохраняя всю важную информацию внутри ИТ инфраструктуры. Интерфейс Mattermost совместим с Slack и обеспечивает работу программного обеспечения разработанного для Slack. Есть две версии программы - одна рассчитана на работу с командами до 50 человек, а другая позволяет организовывать коммуникации между сотнями и тысячами пользователей.

Hubl.in

Решения для видеоконференций WebEx и GoToMeeting стали стандартными инструментами во многих офисах. Эти решения опирались не только на собственные приложения для компьютеров, но и на новые возможности веб-браузеров.

Hubl.in - свободное решение с открытым исходным кодом, для организации видеоконференций от компании Linagora, создателя платформы для совместной работы - OpenPaaS. Hubl.in поднимает связь в реальном времени на новый уровень, позволяя использовать браузер для организации видеоконференций, даже без каких либо плагинов.

Если вы читаете эту страницу, то вы можете попробовать Hubl.in прямо сейчас. Он основан на WebRTC, что позволяет реализовать децентрализованную связь между браузерами. Это значит, что ваша конференция не передается на Hubl.in никаким способом, это повышает безопасность и обеспечивает еще один уровень секретности.

MXNet

Глубинные методы обучения направлены на то, чтобы научить компьютеры самообучению, с помощью моделирования нейронной сети человеческого мозга, а затем передачи этой сети огромного количества данных, для обучения.

MXNet - это легкая библиотека машинного обучения, созданная DMLC разработчиками CXXNet, Minerva, и Purine2. Здесь применен опыт, полученный в этих проектах, а также смешан императивный и символический стиль программирования. MXNet использует планировщик динамических зависимостей, который автоматически паралеллизует как символические, так и императивные операции на лету. Уклон в сторону оптимизации делает MXNet быстрым и потребляющим немного памяти. Библиотека портативная и легкая, она легко масштабируется даже для нескольких машин. Можно даже использовать для таких задач, как распознавание образов на смартфоне. Группа DMLC хочет сделать открытое программное обеспечение широкодоступным. Проект MXNet тоже содержит набор руководств и схем для построения систем машинного обучения.

Bazel

Bazel стремится ускорить процесс сборки и повысить надежность за счет общего хранилища кода, в котором все программное обеспечение находится в состоянии открытого исходного кода. Здесь автоматизировано тестирование и релизы, используется как параллельность, так и кеширование, чтобы ускорить обработку. Особенно подходит для проектов с крупными базами кода, на основе нескольких языков программирования или для различных платформ. Основная особенность Bazel - тщательное тестирование в сложных условиях работы в Google. Текущая версия поддерживает Linux, OS X, но не Windows.

React Native

Разработчики мобильных приложений сталкиваются с трудным выбором: разрабатывать приложения для iOS или Android с помощью собственных инструментов, или воспользоваться кроссплатформенными. С одной стороны, родные приложения быстрее и предлагают лучший пользовательский интерфейс. Однако разработка такого приложения, означает - написать его, по крайней мере, два раза на самых разных языках программирования. Кроссплатформенные инструменты, такие как JavaScript позволяют им писать программу только раз, но эти приложения часто работают плохо и выглядят не очень красиво.

React Native - это OpenSource проект с открытым исходным кодом, поддерживаемый Facebook. Он позволяет двигаться сразу в двух направлениях. Создавая свои приложения с помощью библиотеки JavaScript React вы сохраняете логику работы приложений JavaScript, а также пользовательский интерфейс полностью нативный для обоих оболочек iOS и Android. Для разработчиков React Native представляет собой новый подход к написанию мобильных приложений - учиться раз, писать везде.

Kontena

Docker-контейнеры - революционный способ для развертывания приложений. Но многие организации все еще борются за решение для управления контейнерами.

Kontera - проект с открытым исходным кодом, для управления контейнерами. Kontera имеет много новых технологий и возможностей для ускорения развертывания. Здесь есть поддержка нескольких хостов, мульти-AZ контейнеры, сетевая технология Weave, VPN доступ к контейнерам, а также интуитивно понятный мастер развертывания. У Kontera есть все что компании может понадобиться для разработки, развертывания и контроля контейнерных систем. Она может быть установлена в любой облачной инфраструктуре. Поскольку это открытый исходный код, она скоро выйдет за рамки Docker и будет поддерживать контейнеры Windows, CoreOS PKT и другие контейнерные технологии.

Nulecule

Инициатива открытых контейнеров Docker предоставляет отличную оболочку для приложений. Но он все еще не может управлять зависимостями активов и отношениями между экземплярами в многоконтейнерных приложениях.

Nulecule - это спецификация, для упаковки сложных многоконтейнерных приложений, обеспечивающая правильное развертывание. Nulecule при поддержке Red Hat предлагает целостную систему для управления отношениями между контейнерами. Большинство систем управления контейнерами рассматривают мультиконтейнерные приложения как отдельные объекты, а не как что-то целое. Такой подход ограничивает гибкость и портативность всего приложения. В отличие от этого решение на основе Nulecule создает стандартизированный способ описания приложения, в том числе всех ссылок на зависимости и метаданные коммуникаций внутри каждого образа контейнера.

InSpec

Рабочий процесс DevOps часто завален соблюдением сложных спецификаций и медленным развитием. InSpec обеспечивает путь, ускоряющий работу за счет автоматизации процесса проверки соответствия. Если соблюдение правил является неотделимой частью процесса разработки - это одно из лучших решений.

Как решение с открытым исходным кодом для определения соответствия, безопасности, а также требований относительно политики Inspec предлагает множество сложных функций. В том числе тестов на проверку соблюдения метаданных для периодизации, а также интерфейс командной строки, для удобного выполнения тестов. Пользователи могут контролировать процесс с помощью специального разработанного языка программирования. Поскольку Inspec работает в локальной системе, он может изучить любой узел инфраструктуры.

Hygieia

Технологические гиганты не одиноки в инвестировании в свободное программное обеспечение. В этом году Capital One попытались найти панель инструментов для разработчиков, и небыли обнаружены ни коммерческие решения ни OpenSource проекты. Поэтому компания создала собственную - Hygieia. Панель выпущена в прошлом году и ее исходный код опубликован на GitHub.

Capital One использует Hygieia в процессе разработки программного обеспечения, чтобы дать командам и лидерам простой, доступный и быстрый способ получить представление о текущем состоянии процесса разработки. Вместо того чтобы показывать только часть процесса развития, как это делают другие панели, Hygieia предлагает полный обзор в двух вариантах: видежет и ползунок.

Вариант виджет показывает более подробную информацию: особенности текущего этапа, вклад в код, интеграцию, анализ кода, анализ безопасности, функциональные ресурсы тестирования и развертывания и т д. Ползунок показывает степень прогресса каждого элемента, на этапах разработки, тестирования и развертывания.

Glucosio

Когда программисту Бенджамину Кернеса был поставлен диагноз диабет второго типа в мае 2015 он понял, что нет инструментов с открытым исходным кодом для отслеживания уровня глюкозы или других показателей, для людей подобных ему. В сентябре 2015, он и небольшая команда выпустили Glucosio, первое приложение с открытым исходным кодом для мониторинга уровня глюкозы.

Пользователи Glucosio могут отслеживать уровень глюкозы в крови и получить полезные советы, через приложение помощник. Пользователи также могут внести свой вклад в исследование диабета, оставив анонимную демографическую или личную информацию. Glucosio на данный момент доступно на 20 языках и было загружено на каждом континенте. Разработчики также планируют предложить бесплатный API для исследователей, чтобы они могли получить доступ к данным, которые пользователи оставляют в программе.

Vault

Компания из Сан-Франциско HashiCorp известна своим инструментом для создания и настройки легкой, портативной среды разработки - Vagrant. Новый проект с открытым исходным кодом этой компании - Vault, инструмент для безопасного управления секретами. Здесь могут находиться ключи, API, пароли, сертификаты, учетные данные сотрудников, и другая секретная информация. У HashiCorp отличные Open Source проекты, можно сказать - так держать.

Vault шифрует и расшифровывает данные без их сохранения, а также позволяет командам безопасности определить параметры шифрования, а разработчикам - возможность хранить зашифрованные данные без разработки своих алгоритмов шифрования. Vault даже может генерировать секретные ключи по запросу AWS или баз данных SQL, а затем автоматически их отменять, когда они уже использованы. Поддерживается единый интерфейс для доступа, с жестким контролем, а также подробные журналы аудита, так что пользователи могут быть уверенны, что их секреты в безопасности.

Rancheros

Rancher Labs разработала высокоэффективную технологию запуска контейнеров - операционную систему в миниатюре, со всем необходимым для запуска контейнеров, но ничего больше. RancherOS - это дистрибутив Linux, размером 20 Мб, специально разработанный для простого способа запуска и управления контейнерами Docker. Идея заключается в том, что он похож на CoreOS, Но с одной особенностью - все здесь работает через Docker контейнеры, даже сама операционная система.

В RancherOS Docker работает непосредственно поверх ядра Linux и распределяет все сервисы пользовательского пространства как контейнеры Docker. Экземпляр системы Docker инициализирует все системные службы (Udev, DHCP, TTY) каждая из которых работает в отдельном контейнере. Экземпляр пользователя Docker создает отдельные контейнеры для всех пользователей, в пределах основного контейнера пользователя. RancherOS также обеспечивает обновление через контейнеры и может использовать различные системы управления контейнерами.

OWASP Security Knowledge Framework

OWASP Foundation (Проект Open Web Application Security) - это некоммерческое сообщество, которое предоставляет ресурсы и средства для обеспечения безопасности веб-приложений, которые разрабатывают OpenSource проекты. Многие разработчики не знают о рисках безопасности уязвимостей, с которыми они сталкиваются. С этой целью OWASP SKF (Security Knowledge Framework) обеспечивает свободный инструмент с открытым исходным кодом для обеспечения безопасности веб-приложений. Он также может служить учебным пособием, которое научит основам безопасности в веб-приложениях.

SKF поддерживает разработчиков программного обеспечения на протяжении всего жизненного цикла их продукта, обеспечивая его безопасность. Анализируются методы обработки, которые используют разработчики для редактирования своих данных, а затем перебираются шаблоны для известных уязвимостей. После завершения предлагаются решения для исправления проблем с безопасностью.

Выводы

Это были все новые Open Source проекты, отмеченные премией Black Duck. Награждение происходит каждый год, поэтому новые Open Source проекты за 2016 год мы увидим только в 2017.

Многие разработчики стремятся попасть в проекты на «open source», но не знают, с чего начать. Причина этому – неуверенность в собственных силах. На самом деле open source-проекты предоставляют массу возможностей специалистам различного профиля. Программное обеспечение с открытым кодом, или «open source», существенно повлияло на развитие информационных технологий и заинтересовало многих разработчиков. Однако зачастую специалисты видят ряд препятствий для своего участия в open source-проектах. Вот основные из них:

  • «Я не очень хороший программист».
  • «У меня недостаточно времени, чтобы этим заниматься».
  • «Я не знаю, каким проектом заняться».
Но это не очень хороший подход к проблеме. Так, существует три основополагающих принципа, о которых необходимо помнить всякий раз, задумываясь о новых возможностях в области разработки: Наиболее распространенное заблуждение у новичков в том, что они считают, что для участия в open source-проектах необходимо быть настоящим «гением программирования». Но это совсем не так. Безусловно, в мире open source-разработки есть свои гуру, однако далеко не все. Большинство из них – обыкновенные разработчики, которые всего-навсего хорошо делают свою работу, независимо от того, насколько малый или большой вклад они вносят в проект. И далеко не всегда эта работа связана с программированием. Работа над open source-проектами в основном заключается в рутинном исполнении текущих задач. Большая часть задач, которые получают разработчики, не требует гениального видения проблемы, как у Ларри Уола, создателя Perl, или Дэвида Хейнемейера Ханссона, основателя Rails. Создание нового языка программирования или фреймворка, конечно, требует вдохновения, но остальная часть работы, которая и делает такие проекты, как Perl или Rails, успешными, требует постоянных рутинных усилий. Эти усилия едва ли могут принести вам славу, но они, безусловно, нужны и важны, и рано или поздно ваш вклад будет замечен.

Внимательно слушайте

Все стадии работы в open source-проектах так или иначе связаны с людьми, которые в них задействованы. Вы присоединяетесь к команде, а это значит, что необходимо понимать, как устроены процессы и взаимодействие между всеми ее участниками. Прийти в команду со своим видением ситуации и навязывать всем свою точку зрения - не самый удачный вариант. Для некоторых проектов такой подход может быть приемлемым, но если над продуктом работают уже не один месяц, шансы на то, что ваши идеи воспримут с энтузиазмом, очень невелики. Прислушиваться к мнению и точке зрения коллег – это, пожалуй, лучший способ понять, что необходимо проекту на текущей стадии. 1. Присоединяйтесь к рассылке. На многих проектах e-mail-рассылка является основным способом коммуникации. На крупных проектах обычно есть несколько списков рассылки. Например, на проекте PostgreSQL используют не менее 12 рассылок, касающихся обсуждения вопросов пользовательского интерфейса, а также 6 рассылок для разработчиков. Оптимальный вариант – следить за основными рассылками в каждой из групп, чтобы начать вникать в основные текущие вопросы. 2. Следите за блогом. Блоги, которые ведут ведущие разработчики, могут быть весьма полезны, поскольку будут информировать вас об изменениях и улучшениях в грядущем релизе. Существуют специализированные порталы со словом “planet” в названии, которые аккумулируют новости и посты из блогов с различных ресурсов, связанных с проектом. Найти такой ресурс можно, отправив поисковой запрос типа “planet ”в Google. 3. Добавляйтесь в чат. Во многих open source-проектах для обсуждения текущих вопросов используются групповые чаты. Поэтому не забудьте выяснить, как общаются между собой участники вашего проекта.

Работайте с “тикетами”

Безусловно, код – это основа любого open source-проекта, но не стоит полагать, что написание кода – это единственный способ участия в проекте. Технической поддержке зачастую уделяют недостаточно внимания в погоне за созданием новых функциональных возможностей и исправлением ошибок. А ведь именно это и есть те области, которые позволяют новичкам войти в проект. Большинство проектов имеют общую открытую систему работы с “тикетами”, которая связана с веб-сайтом проекта и включена в документацию. Подобная система – это основной источник коммуникации между разработчиками и пользователями. Постоянная работа с текущими запросами – это отличная возможность внести свой вклад в проект. Для работы с системой могут понадобиться специальные права доступа, которые вам предоставит тим лид, как только вы решите заняться текущими запросами от пользователей. 4. Находите баги. В проектах с открытым исходным кодом баги часто проходят незамеченными. Обнаружение и сортировка багов может значительно сэкономить время разработчикам на поиск проблемы. Если пользователь пишет: «Программа не работает, когда я делаю такие-то шаги», - не поленитесь разобраться в том, чем вызвана эта проблема. Проблема повторяется? Вы можете вызвать эту проблему, повторив ряд конкретных шагов? Вы можете сузить круг проблемы до конкретного браузера или дистра? Даже если вы не знаете истинную причину проблемы, попытки сузить круг возможных причин во многом помогут разработчикам справиться с ней. Независимо от того, что вам удалось выяснить, добавьте свои комментарии к багу, чтобы все могли с ними ознакомиться. 5. Закрывайте старые баги. Нередко случается, что баги «пофиксили», но «тикет» не закрыли. Таким образом, система «засоряется» старыми багами, которые мешают работать с актуальными проблемами. «Очистка» системы трекинга от старых багов – это скучная и длительная процедура, но она очень важна для всего проекта. Для начала отфильтруйте «тикеты» по дате, например, старше, чем один год, и посмотрите, существуют ли такие баги. Просмотрите логи по релизам и убедитесь, что эти баги устранили и их можно закрыть. Если баг исправили, необходимо добавить комментарий с упоминанием версии, в которой баг был устранен, и закрыть его. Постарайтесь воссоздать баг в последней версии продукта. Если его невозможно воспроизвести, сделайте соответствующую запись и закрывайте «тикет». Если баг продолжает повторяться, укажите это в «тикете» и оставьте его открытым.

Работайте с кодом

Все программисты, работающие на проекте, независимо от опыта и квалификации, могут помочь вам с кодом. Не думайте, что вам необходимо быть гением, чтобы начать работать над проектом. Если ваша работа связана с изменением кода, изучите методы изменения кода, которые используются на проекте. Для каждого проекта характерны свои внутренние технические процессы, поэтому узнайте о них побольше, прежде чем предложить ваш вариант кода. Например, на проекте PostgreSQL жестко регламентированы все процессы: изменения в коде отправляются в виде патча в рассылке всем основных разработчикам, которые тщательно изучают все изменения. С другой стороны, есть и другие типы проектов, как, например, Parrot, где программисты могут «коммитить» все изменения непосредственно в базу. Если на проекте используется GitHub, возможно, процессы поставлены через pull request’ы, т.е. запросы на включение сделанных изменений. Помните: нет двух одинаковых проектов. Всякий раз, когда вы переписываете код, не забывайте, что вы работаете в команде и поэтому делайте все возможное, чтобы ваш стиль совпадал с общей базой, используемой в проекте. Часть кода, которую вы добавляете или меняете, не должна выбиваться из общего кода. У вас могут быть свои предпочтения в оформлении кода, но ваш код должен соответствовать общим стандартам, принятым на проекте. В противном случае это то же самое, что сказать: «Мне не нравится ваш стиль, и я думаю, что мой лучше, поэтому вы должны делать так, как я». 6. Тестируйте бета-версии. В любом проекте, который создается для работы на нескольких платформах, могут возникать проблемы, связанные с переходом на другую платформу. Накануне нового релиза, когда выходит новая бета-версия, руководители проектов ожидают, что они будут протестированы на различных платформах. Вы можете принять участие в тестировании и убедиться, что продукт работает на той или иной платформе. Как правило, вам необходимо собрать и установить новый «билд» и протестировать продукт, но особенно значимо для проекта, если вы используете нестандартные аппаратные средства. Если вы подтвердите, что «билд» работает и при таких условиях, это существенно облегчит задачу руководителей проекта в определении текущего статуса релиза. 7. Исправляйте баги . Обычно с этого начинается работа новичков с кодом. Здесь всё просто: найдите «тикет», в котором описывается какой-нибудь баг и попробуйте устранить его в коде. Подтвердите изменение в документации (если необходимо). Неплохо также добавить тест для тестирования той части кода, которую вы исправили; некоторые проекты требуют, чтобы все баг-фиксы сопровождались соответствующими тестами. Ведите записи, по мере того как вы осваиваете незнакомый код. Даже если вы не можете справиться с багом, опишите в тикете, что вам удалось о нем выяснить. Это поможет тем участникам команды, кто будет работать с багами после вас. 8. Пишите тесты. В большинстве проектов используются тестовые комплексы, предназначенные для тестирования кода, но сложно представить себе такой комплекс, который бы не предусматривал возможности добавления в него новых тестов. Используйте такие тестовые инструменты, как gcov для C или Devel::Cover для Perl, чтобы установить те области исходного кода, которые нельзя протестировать готовым тестовым комплексом. Затем добавьте соответствующий тест, чтобы иметь возможность протестировать необходимый функционал. 9. Отключайте оповещения компилятора. Часто «билд» проектов на С сопровождается многочисленными оповещениями компилятора. Такое сообщение не всегда говорит об ошибке, но заставляет отвлекаться. Проверьте, возможно, в коде скрыт какой-то баг. Если же багов нет, отключайте ложные оповещения. 10. Добавляйте комментарии. Когда вы просматриваете код, вам могут встретиться отдельные запутанные участки. Если какой-то кусок кода привел вас в недоумение, то велика вероятность того, что и у других он вызовет такую же реакцию. Опишите эту проблему в документации и отправьте патч.

Работайте с документами

Ведение документации – это рутинная составляющая любого проекта, которой зачастую пренебрегают. Кроме того, проблемы с документацией часто могут быть вызваны тем, что она написана с точки зрения людей, хорошо знакомых с проектом, нежели тех, кто только знакомится с ним. Если при чтении документации по проекту вас когда-нибудь посещала мысль: «Такое ощущение, что этот мануал написан так, как будто я уже знаю, как пользоваться программой», то вы понимаете, о чем речь. Очень часто новый взгляд со стороны позволяет выявить недостатки в текущей документации, которые могут быть не замечены непосредственными участниками проекта. 11. Приводите примеры. Нет таких проектов, в которых существовало бы слишком много примеров. Независимо от того, о чем идет речь: об API, об электронной библиотеке, о графическом приложении, таком как Gimp, например, или об инструментах командной строки – хороший пример с правильным описанием может быстро дать более четкое представление о правильном использовании программы, нежели стопка документов. Для API или электронной библиотеки создайте пример программы, которая использует этот инструмент. Он может быть взят из кода, который вы уже написали, и адаптирован к нуждам текущего примера. Для инструментов лучше всего привести какой-то пример, как можно использовать в повседневной жизни. Если вы визуал, добавьте скриншот какого-либо процесса, например, установки приложения.

Работайте в команде

Работа в open source-проектах только отчасти связана с кодом. Настоящий успех проекту приносит команда. И вы можете помочь созданию сплоченной команды. 12. Отвечайте на вопросы. Лучший способ сплотить команду – это помогать другим. Для дальнейшего успеха проекта особенно важно отвечать на вопросы, в частности, на вопросы новичков. Это время не будет потрачено зря, даже если новичок задает вопрос, на который можно найти ответ, перечитав необходимую документацию. Кроме того, вы получите нового благодарного и активного участника своей команды. Все с чего-то начинают, а любому проекту необходим постоянный приток кадров, чтобы он продолжал развиваться. 13. Ведите блог. Если у вас есть блог, делитесь своим опытом, который вы получили на проекте. Расскажите о проблемах, с которыми вы столкнулись при использовании софта, и как вам удалось их решить. Таким образом, вы сможете убить двух зайцев сразу: поддержать внимание к проекту своих коллег и создать полезную базу информации для тех, кто присоединится к проекту в будущем и будет искать в сети ответы на уже описанные вами вопросы. (Блог, рассказывающий о ваших технических достижениях и изысканиях – это также отличный способ поделиться реальным опытом разработки и решения технических проблем, который может вам пригодиться при поиске новой работы). 14. Уделяйте внимание вебсайту. Большинство программистов, к сожалению, не самые лучшие дизайнеры, поэтому едва ли найдется проект, при разработке которого не прибегали дополнительно к помощи дизайнеров. Если вы талантливый веб-дизайнер и можете помочь улучшить вебсайт, а, следовательно, и представление проекта для пользователей, именно на это вам и следует направить свои усилия. Возможно, сайту необходим редизайн или собственный логотип. Именно эти умения могут требоваться в вашей команде. Многим руководителям команды на проектах не хватает именно таких креативных дизайнеров. И самое главное: прислушивайтесь к словам ваших коллег. Возможно, вам удастся помочь им в решении насущной проблемы. Так, например, недавно разработчики Parrot в процессе обсуждения в рассылке решили использовать GitHub в качестве системы работы с «тикетами» вместо прежней системы Trac. Некоторые были против этого перехода, поскольку не было возможности перенести существующие «тикеты» в новую систему. После дня обсуждения всех «за» и «против» один из разработчиков предложил написать программу-конвертер, чем и привлек к себе внимание. Через некоторое время программа была готова, и всю историю из более 450 «тикетов» удалось сохранить. В любом проекте всегда есть возможность найти для себя работу, и на open source-проектах таких возможностей множество. Нужно только суметь найти правильное применение своим способностям.
  • Tutorial

Ниже я расскажу о том, как собрать Хромиум в домашних условиях, как выбрать задачу из системы баг-трекинга и как сделать так, чтобы ваш код оказался в репозитории.

Для начала хочу сказать, что по адресу www.chromium.org/Home находятся подробнейшие инструкции на все случаи жизни - начиная от получения исходного кода и заканчивая инструкциями по отправке ваших патчей на коммит. Кроме того, рекомендую прочитать этот документ и пройтись по ссылкам в нем.

Процесс для независимого разработчика состоит из следующих шагов:

  1. Собрать Хромиум.
  2. Выбрать баг из Issues List.
  3. Исправить баг, протестировать.
  4. Отправить баг на ревью.
  5. Исправить review issues, перейти к шагу 4.
  6. Попросить ревьюера закоммитить ваш код.
  7. Наслаждаться результатом.
Ниже - подробнее о каждом из шагов.
Шаг 1. Собрать Хромиум
Для сборки требуется достаточно современный компьютер, различные документы на вышеуказанном сайте рекомендуют многоядерный процессор и не менее 8 Гб памяти. Кроме того, потребуется около 60 Гб свободного пространства на жестком диске, в качестве которого рекомендуют использовать отдельный SSD.

Теперь немного о моем личном опыте. Все цифры будут приведены ориентировочно и исключительно по памяти, записей, к сожалению, не делал.

Мне удалось собрать Хром под Windows и Linux. Под Mac OS не удалось провести линковку, хотя компиляция прошла успешно.

Для сборки под Windows использовался компьютер пятилетней давности с двухядерным процессором и 3 Гб памяти. Полная сборка заняла около 6 часов (не могу сказать точнее, я ставил билд на ночь), плюс линковка - более получаса (на 32 битах оказалось невозможным включить инкрементальную линковку).

Для сборки версии под Линукс был арендован виртуальный сервер в облаке у одного из российских хостеров. Ресурсы там выделяются по запросу и при билде использовалось около 8 Гб памяти и 8 ядер процессора. Оплата там снимается за использованные ресурсы и билд с нуля обошелся, кажется, в 35 рублей. Время полного билда - около часа.

Для сборки под Mac OS использовался хакинтош в виртуальной машине, компиляция заняла больше десяти часов. Я не стал тестировать сборку под этой ОС, лишь убедился, что мои изменения не сломали билд.

Как сказал мне один из работников Google, разработчики, работающие над Хромом, используют два билд бокса с разными операционными системами на их собственный выбор. Он также добавил, что Chrome отличается от Chromium лишь наличием нескольких проприетарных модулей и логотипом. Процесс работы сотрудника Google над Chrome полностью совпадает с процессом работы независимого контрибьютора за исключением того, что сотрудник Google имеет доступ к некоторым закрытым записям в баг-трекере, связанным, например, с безопасностью.

Шаг 2. Выбрать баг из Issues List
Если сборка прошла успешно, вы можете найти открытый баг и попытаться его исправить. Все дефекты, относящиеся к браузеру, находятся в баг-трекере по адресу code.google.com/p/chromium/issues/list .

Начинающим разработчикам рекомендуется выбирать баги с меткой GoodFirstBug . Предполагается, что задачи с этой меткой проще и человек, имеющий слабое представление о коде, сможет достаточно быстро с ними разобраться.

Шаг 3. Исправить баг, протестировать
На этом шаге у вас уже есть работающая сборка и выбранный баг. Все, что вам остается, это попытаться воспроизвести баг и выяснить его причину, пользуясь отладчиком и здавым смыслом. Я пользовался Microsoft Visual C++ 2008 Express Edition (в данный момент они рекомендуют использовать версию 2010).

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

Если это ваш первый фикс бага в проекте, то помимо изменений в коде вам необходимо внести ваше имя в файл AUTHORS и включить это изменение в ваш коммит.

Шаг 4. Отправить баг на ревью
Ревью кода перед коммитом в проекте обязательно. Если у автора кода нет прав на запись в репозиторий (а это как раз наш случай), то именно ревьюер, как правило, коммитит код.
Шаг 5. Исправить review issues, перейти к шагу 4
Ревьюеры обычно отвечают на письма в течении 24-48 часов. В моих случаях было несколько раундов ревью, и, насколько я понимаю, это распространенная практика. После того, как все ревьюеры ответят LGTM (looks good to me), вы можете попросить одного из них закоммитить ваш код.
Шаг 6. Попросить ревьюера закоммитить ваш код
Я обычно просто писал что-то вроде “Could you please commit it for me?” и получал через некоторое время письма от tryserver, а потом от commit-bot о том, что код попал в репозиторий.
Шаг 7. Наслаждаться результатом
В целом весь процесс оставил у меня самые положительные впечатления. Код качественный, все организационные и технические моменты подробно задокументированы на сайте chromium.org и в исходном коде. Утилиты удобные, а люди - дружелюбные.

С удовольствием отвечу на вопросы в комментариях.

Теги:

  • chromium
  • google chrome
Добавить метки

Разработчика из США, который описал личный опыт участия в open source проекте. Из этого материала вы узнаете:

  • что такое open source проекты;
  • как вы можете внести свой вклад;
  • где искать проекты и задачи.

Почему стоит браться за open source проекты?

В первую очередь - это бесплатная практика программирования. Также вы можете пополнить такими проектами ваше резюме, и, поверьте, если вы сможете объяснить ваш вклад в общее дело, получить должность «джуна» будет гораздо проще, чем в случае «просто закончил курсы».

Open source проект на пальцах

Любите ли вы гулять по парку? Возможно не сейчас, потому что уже ноябрь, как говорят «зима близко!». Уверен, в хорошую погоду вы с удовольствием бродите меж деревьев по ухоженным аллеям. Но что, если бы ваш любимый парк забросили муниципальные службы? Очень быстро начался бы беспорядок. Везде валялся бы мусор вперемешку с отходами жизнедеятельности собак в томительном ожидании, что в них кто-нибудь наконец-то вступит. Вряд ли вы бы продолжали ходить туда на прогулки.

А теперь представьте более радостную картину: группа добровольцев взяла под свою ответственность содержание своего любимого парка. Она регулярно выделяет средства, чтобы превратить нечто неухоженное и заброшенное во что-то очень красивое и полезное другим людям. И делает это не только ради личного удовольствия, но и к радости общественности. Скорее всего, ваш любимый парк содержат на наши с вами налоги, но в целом приведенная выше ситуация описывает то, как работают open source проекты. Хотя любое программное обеспечение, по сути, рассчитано на конечного пользователя, как разработчик вы можете внести свой вклад в open source проект, тем самым сделать мир лучше с помощью нового доступного ПО. Если вы хотите принять участие в open source проекте, нужно понять, кто его курирует и постараться наладить взаимодействие с этими людьми. Я вовсе не имею в виду, замучить их до полусмерти вопросами и ожидать всеобъемлющей опеки во время работы. Вы - взрослый самостоятельный человек (даже если вдруг ещё не взрослый, то быть самостоятельным - отличная идея!). Надеюсь, вам уже не нужно вести за руку и расписывать каждый шаг. В этом я вам не помощник. Зато я могу дать вам несколько дельных советов, которые помогут вам при попытке внести свой первый вклад и потенциально включить ваш кусок кода в проект с открытым исходным кодом.

Поиск проекта

Если вы ищете открытый проект, чтобы принять в нём участие, найдите такой, который вам действительно интересен. Желательно, чтобы в нём было много задач, из которых можно выбирать. Не соглашайтесь на первый попавшийся проект. В таком случае вы будете больше заинтересованы и сможете серьезно отнестись к задачам.

Где искать проекты Open Source

Их можно найти в открытых репозиториях GitHub. Собственно, там все их и ищут. Там очень много .

Поиск хорошей первой задачи

Поиск хорошего первого задания - ключ к успеху. Не берите на себя больше, чем вы сможете сделать. Не пытайтесь сразу показать все свои знания: ищите простейшую из возможных задач. Это лучший способ понять, как проходит взаимодействие между вами и кураторами проекта. В некоторых проектах задачи отмечены специальными метками, указывающими на уровень сложности, если кураторы считают их подходящими для начинающих разработчиков. Поищите что-то подобное, когда будете смотреть на задачи выбранного проекта.

Когда вы найдете подходящую задачу, напишите комментарий кураторам проекта о том, что вы хотели бы над ней поработать. Чаще всего вам дадут добро, но возможно по какой-то причине попросят выбрать другой вариант. Не думайте, что вы не можете начать пока не пришел ответ, но будьте гибкими, если вас попросят остановиться и заняться чем-то другим. Для моего первого задания я выбрал то, где было необходимо немножко подправить css. Мне казалось, что я могу это реализовать и это не угнетало меня.

Начало и ознакомление

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

В проекте, на который я попал, таких моментов было немного, но это не значит что это было просто. Например, нам пришлось установить специфические версии Ruby и специфические версии Rails, PostgreSQL, Phantom JS и Gemfile с перечнем Gems для инсталляции. Казалось, что это не так уж и много требований, но я столкнулся с большой проблемой с поиском специфической версии Ruby, необходимой для разработки проекта и работающей на моем компьютере. Наконец, я использовал RVM для переключения версий: это еще одна вещь которой я научился, только для того чтобы просто установить проект и заставить его работать на компьютере. Когда же я запустил проект, то увидел, что тот написан на Angular и Coffee Script, с применением Active Record для взаимодействия с данными поступающими из бек-энда. Это были новые для нас вещи, и с ними нужно было разобраться самостоятельно до начала работы над проектом.

Поиск других задач

Возможно, прямо сейчас вам это не нужно, и даже не пригодится в ближайшем будущем, но я столкнулся с этим практически сразу. Огромное везение сразу заметить, что в проекте что-то работает не так. Если вы нашли такой баг, переходите на рабочий сайт и посмотрите так ли это там. Не спешите писать в поддержку, возможно, всё работает. Обычно кураторы контролируют ситуацию и критичных ошибок быть не должно. Но если вы всё-таки обнаружили то, что требует внимания, найдите и проверьте среди задач, которые уже существуют. Скорее всего, проблемная задача уже была записана и скорее всего вам не надо ничего делать. Хотя, возможно, стоит решить ее самостоятельно, когда вы закончите то, над чем работаете.

Когда вы оформляете и записываете новую задачу, убедитесь, что вы как можно более подробно описали её. Используйте скриншоты, чтобы наглядно показать, что вы пытаетесь сказать и максимально упростить понимание вопроса постороннему, который заглянет на сайт и увидит описываемую проблему. В моем случае я закончил, добавив две дополнительных задачи, кроме той, что была закреплена за мной. Я даже не смог сделать пул реквест (это было связано с ограничениями безопасности). Мне казалось, что я сделал два шага назад для проекта, но на самом деле описание и оформление задач все равно двигает проект вперед. Создание pull request (PR) Вы решили поставленную перед вами задачу. Прежде, чем писать отчёт о проделанной работе, покажите решение тому, кто сможет его оценить. Предварительный просмотр - отличная идея всегда, но для вашего первого вклада в открытый проект он просто необходим . Вы же не хотите краснеть из-за недоработанного или неправильно работающего куска кода? По этой же причине кураторы проекта предложат вам пройти все необходимые тесты перед пул реквестом. Поэтому проверьте себя загодя, чтобы быть уверенным в своей работе и поправить её в случае необходимости до получения подтверждения от кураторов. Убедитесь, что вы придерживаетесь названий или стилистики, которая принята кураторами проекта. Вы можете найти информацию в файле CONTRIBUTING.md , он есть в большинстве проектов. Также там вы сможете уточнить, в каком виде вы должны создавать commit message, как должно выглядеть описание вашего pull request и как оформить новую задачу.

Покинуть задачу

Иногда понимаете, что не справляетесь со взятой задачей. Или вам казалось, что у вас есть время на проект, но на деле его не оказалось, вам на голову свалилась срочная работа и вам нужно заняться ею. Это в норме вещей. Главное, отпишитесь от задачи и оставьте сообщение кураторам, чтобы они знали, что вы не сможете продолжать заниматься проектом. Но ни в коем случае не бросайте задачу, не сообщив кураторам и не отписавшись от неё.

Заключение

Я считаю, что от участия в разработке открытого проекта - одна сплошная польза. Вы практикуетесь и в тоже время делаете что-то полезное для других людей. С другой стороны, данный проект может стать еще один пунктом в вашем резюме и дать дополнительные плюсы при борьбе за получение желаемой должности. Буквально в прошлую пятницу я общался с программистом, который устроился на свою работу (очень крутую и интересную, такую, которая может изменить мир к лучшему, и я действительно не шучу) именно благодаря его работе над open source проектами.
Что ещё почитать:

Свободное программное обеспечение - неотъемлемая часть бизнеса Google. В этой компании проекты буквально рождаются и умирают с open source. Без Linux и открытого ПО не существовало бы компании Google в том виде, в каком мы её знаем. Google не только использует СПО в повседневной деятельности, но и постоянно выкладывает в открытое достояние собственные наработки. Например, за три месяца текущего года Google открыла Chrome для iOS , Upspin (фреймворк для глобального единого пространства имён), E2EMail (экспериментальный почтовый сервис с оконечным шифрованием), перцептуальный JPEG-энкодер Guetzli . Это только самые крупные проекты, которыми Google поделилась с сообществом в 2017 году.

Всего за время своей работы Google опубликовала код уже более 2000 проектов. Только как их посмотреть? Теперь вдобавок к репозиториям на GitHub все open source проекты Google доступны по единому адресу . Это новый портал свободного программного обеспечения поисковой компании.

В Уилл Норрис (Will Norris), разработчик группы Google Open Source Programs Office, пишет: «Свободное и открытое программное обеспечение лежало в нашем техническом и организационном основании с самого начала существования Google. Начиная с серверов под Linux, и заканчивая внутренней корпоративной культурой Google, когда кто угодно из другой команды разработки может выпустить патч для вашего кода. Open source является частью всего, что мы делаем. В обмен, мы публикуем миллионы строк open source кода, поддерживаем программы вроде Google Summer of Code и Google Code-in , спонсируем проекты open source и сообщества через организации вроде Software Freedom Conservancy , Apache Software Foundation и ».

И вот сейчас, спустя 18 лет после своего основания, компания Google открыла портал , который объединяет все открытые проекты Google, с сопутствующей информацией об использовании, выпуске и поддержке свободного программного обеспечения.

Зачем Google делает это? Если верить сайту, компания уверена, что СПО является всеобщим благом . Когда софт открыт и доступен для всех, это поощряет сотрудничество и продвижение технологий и «решает реальные мировые проблемы».

Наверное, так оно и есть на самом деле.

Нужно заметить, что портал Google - это не репозиторий вроде GitHub, а скорее инфорационно-справочный портал, здесь стоят ссылки на соответствующие репозитории GitHub. Таким образом, вряд ли можно опасаться, что Google откажется от размещения кода на GitHub, самом удобном сайте для совместной работы, который уже стал стандартом де-факто в своей области.

Уилл Норрис пишет, что компания не знает, какие проекты станут популярными и получат всеобщее признание, поэтому они поощряют своих сотрудников публиковать весь код, какой только возможно . Соответственно, здесь можно найти разные проекты по масштабу и уровню поддержки. Есть и крупные известные проекты вроде , и , есть и маленькие «любительские» проекты, которые сотрудники, вероятно, создали в свободное от основных обязанностей время (20% времени рабочего программисты Google могут работать над проектами на своё усмотрение). Например, и . Некоторые из проектов полностью поддерживаются и развиваются сотрудниками Google и сообществом, другие являются экспериментальными, сделанными просто ради удовольствия.

Есть кое-что ещё. Новый портал Google - это не просто собрание открытых проектов, сделанных в компании. Здесь компания ещё и делится своим опытом и корпоративными практиками разработки открытого программного обеспечения. В опубликована копия всей внутренней документации Google по разработке open source (за исключением нескольких документов). Это именно то, что видят и читают сотрудники компании. Здесь несколько разделов. Один из них посвящён - в том числе создание патчей для больших проектов и написание собственных маленьких проектов в 20% свободного времени. Другой раздел объясняет практики OSS внутри компании. Там разъясняется, под какими лицензиями можно брать и использовать код. Например, код под лицензиями AGPL использовать . Здесь размещён тщательно отобранный каталог из тысяч пакетов, рекомендованных для использования. Наконец, третий раздел посвящён инициатив свободного ПО: различным студенческим программам, проводимым мероприятиям, выдаваемым грантам и т. д.

Очевидно, что Google видит свободное ПО как неотъемлемую часть своей деятельности - и стремится максимально поддерживать и использовать его.

Open source становится важной частью бизнеса не только Google, но и многих других компаний. Как и предсказывали отцы-основатели, свободный софт распространяется как вирус, заставляя создателей производных программ тоже выпускать их под свободными лицензиями. Как сказал исполнительный директор Linux Foundation Джим Землин (Jim Zemlin), свободное ПО станет новым . Он имеет в виду, что 80% ценности любых технологий - от смартфонов или других сфер ИТ - будет происходить от свободного софта, и только 20% - от проприетарного. Процесс постепенно идёт. Исследования показывают, что в 2015 году .