Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Создайте свой собственный свободный программный проект

Оригинал: Create Your Own Free Software Project
Автор: Mike Saunders
Дата публикации: 6 февраля 2016 г.
Перевод: А.Панин
Дата перевода: 9 марта 2016 г.

У вас появилась отличная идея, связанная с новым приложением или игрой? Вы не знаете, с чего следует начинать работу над проектом и как привлечь к нему сторонних разработчиков? Mike Saunders с удовольствиемподелится своим опытом с вами.

Мир свободного программного обеспечения является чрезвычайно демократичным. Любой человек с компьютером, соединенным с сетью Интернет, может влиться в него - ведь в нем не существует никаких барьеров, связанных с уровнем доходов и социальным статусом. Образование в сфере компьютерных наук, разумеется, может помочь, но при этом многие разработчики, создающие свободное программное обеспечение под эгидой компаний Red Hat, Canonical и Intel никогда не посещали никаких университетов и получили свои должности просто разрабатывая качественный код.

Таким образом, любой человек, который имеет возможность внесения своего вклада в разработку свободного программного обеспечения также имеет возможность создания нового свободного программного проекта. Но как превратить прекрасную виртуальную идею в успешный проект? Списки проектов веб-сайтов SourceForge и GitHub полны заброшенных проектов примерно с 50 строками исходного кода, причем каждый из этих проектов также начинался в результате появления у его владельца революционной идеи о создании нового музыкального проигрывателя, клиента электронной почты или игры. Да, мир свободного программного обеспечения является просто замечательным, но около 95% свободных проектов никогда не набирает популярности и забрасывается разработчиками после нескольких недель разработки.

Ниже я расскажу о том, как избежать подобной стагнации и гарантировать своему проекту блестящее будущее. Мы рассмотрим вопросы планирования процесса разработки, распространения созданного программного продукта, привлечения сторонних разработчиков, а также добавления созданного программного продукта в репозитории наиболее популярных дистрибутивов. Приведенные ниже советы базируются в том числе на собственном опыте: автор данной статьи работает над проектом простейшей операционной системы (http://mikeos.sf.net), образы которой были загружены пользователями более 60000 раз, а в самом проекте участвует более чем 20 разработчиков со всего мира. С момента запуска проекта в 2006 году был накоплен огромный опыт, которым автор с удовольствием поделится с читателями.

GitHub является одним из самых популярных остингов кода, позволяющим использовать систему отслеживания ошибок

GitHub является одним из самых популярных остингов кода, позволяющим использовать систему отслеживания ошибок

Выбор названия проекта, хостинга и лицензии

Крайне важно выбрать хорошее название в самом начале развития проекта. Вы можете попытаться использовать временное название проекта или специализированный термин в качестве названия проекта, но если вы захотите изменить его впоследствии, вам наверняка придется использовать новые строки URL на веб-странице проекта, что приведет к потере большого количества переходов на нее со стороны поисковых систем. Кроме того, название проекта должно в полной мере соответствовать версии 1.0. В качестве примера можно рассмотреть игру Minetest, клон игры Minecraft с открытым исходным кодом: название проекта не было таким уж плохим для версии 0.0.1, которая по сути являлась обычным тестом на наличие у команды разработчиков необходимых качеств для создания аналога игры Minecraft, но на данный момент игра является гораздо более функциональной, а ее название говорит об обратном.

Также следует по возможности избегать использования специальных символов, наличие которых в строках URL приводит к проблемам с поисковыми системами. Например, на конференции FOSDEM мы столкнулись с представителями проекта OP^2, в рамках которого осуществляется разработка программного обеспечения для телефона VoIP с открытым исходным кодом, но просто попробуйте ввести название этого проекта в строку запроса поисковой системы Google и осуществить поиск. Вы наверняка не найдете ничего стоящего, а если люди не могут найти ваш проект с помощью самой популярной в мире поисковой системы, название вашего проекта явно является неудачным. (Мы видели и более неудачные названия проектов, содержащие символы звездочек и вертикальных черт. Ни в коем случае не повторяйте ошибки авторов этих проектов!)

Попытайтесь выбрать запоминающееся название проекта и помните о том, что оно не должно быть непосредственно связано с типом разрабатываемого программного продукта. Firefox не имеет ничего общего с огнем или лисами, но это короткое, уникальное немного странное имя, которое помнит каждый человек. И снова помните о том, что люди будут искать ваш проект с помощью Google: не используйте слишком общее название. Команда разработчиков GNOME 3 решила изменить название веб-браузера Epiphany на простое название Web, но представьте, как пользователи будут искать решения возникающих проблем с помощью Google. Запрос "Ephphany page load crash" позволит получить более приемлемые результаты, чем запрос "Web page load crash", поэтому не стоит переоценивать данное изменение, внесенное нашими друзьями из проекта GNOME.

Подбор подходящего хостинга

После выбора названия проекта следует обеспечить сетевое присутствие его исходного кода. Разнообразие доступных вариантов может показаться ошеломляющим, но мы можем рекомендовать лишь несколько наиболее популярных сетевых сервисов. GitHub (https://github.com) на данный момент является наиболее популярным сервисом, позволяющим создать репозиторий исходного кода проекта, который может быть клонирован с помощью клиента git любым пользователем для независимой доработки в рамках отдельной ветви. GitHub отлично подходит для быстроразвивающихся проектов с большим числом участников, хотя предоставляемые ресурсы в некотором смысле ограничены - вы не сможете использовать этот сервис для создания форумов или списков рассылки.

В то же время, сервис SourceForge (www.sourceforge.net) является одним из старейших хостингов свободных проектов и позволяет создавать упомянутые выше форумы и списки рассылки. Вы можете даже администрировать сайт своего проекта с помощью клиента SSH. При этом SourceForge является огромным сайтом, который на первый взгляд может показаться слишком запутанным; к тому же, иногда этот сервис становится недоступным на короткие промежутки времени из-за технических проблем. В недавнем прошлом сервис SourceForge подвергся критике из-за модификации установщиков свободных программ для Windows с целью включения в них рекламы, но подобные модификации никоим образом не затрагивают пользователей Linux.

Если вы серьезно относитесь к принципам свободного программного обеспечения, желаете использовать лицензию GPL и планируете избегать использования всех несвободных форматов файлов (таких, как Flash) на страницах веб-сайта проекта, вы можете попробовать сервис Savannah (http://savannah.gnu.org). Другой альтернативой, особенно подходящей для проектов, которые тесно связаны с Ubuntu, является сервис Launchpad (www.launchpad.net). Кроме того, раньше существовал сервис GoogleCode (http://code.google.com), который был в некоторой степени ограниченным в плане функций, но очень надежным благодаря современным датацентрам Google. На данный момент упомянутый сервис более не функционирует.

Небольшое замечание по поводу организации веб-присутствия: всегда пишите о том, что делает ваше приложение в верхней части главной страницы веб-сайта проекта. Многие проекты имеют веб-сайты с отличным дизайном, которые не содержат упомянутой информации о распространяемом программном обеспечении. Кроме того, постарайтесь добавить на главную страницу веб-сайта раздел новостей (с датами) - также предпочтительно в верхнюю часть. Благодаря данному разделу пользователи будут видеть, что ваш проект находится в активном состоянии. Попытайтесь кратко описать основные достоинства вашего приложения в рамках небольшого маркированного списка и добавить снимки окон работающего приложения. Если у вас нет возможности создать снимки окон приложения (например, из-за того, что приложение использует интерфейс командной строки), попробуйте установить приложение для записи скринкастов из репозитория программного обеспечения вашего дистрибутива, такое, как RecordItNow или SimpleScreenRecorder и создать с помощью него несколько видеороликов, демонстрирующих возможности приложения.

Выбор лицензии

Перед тем, как написать хотя бы одну строку кода, важно выбрать лицензию, в соответствии с условиями которой будет распространяться исходный код проекта. Вы не можете просто сказать, что ваша программа является программным обеспечением с открытым исходным кодом или свободным программным обеспечением - вам необходимо приложить к ее исходному коду полный текст лицензионного соглашения для того, чтобы потенциальные разработчики вашего проекта знали, что им разрешено делать с кодом. На сегодняшний день наиболее популярной лицензией в мире Linux является Стандартная Общественная Лицензия (General Publc License, GPL), в соответствии с которой каждый человек вправе читать исходный код программного компонента, модифицировать и распространять его. При этом условия лицензии GPL являются более сложными, чем "делай все, что хочешь с исходным кодом"; данная лицензия также распространяет действие описанных выше трех свобод на всех людей. Вы не можете взять программу, распространяемую в соответствии с условиями лицензии GPL и создать на ее основе пропиетарную программу с закрытым исходным кодом - вам придется поделиться своими модификациями, сделав их доступными для широкой общественности в соответствии с условиями той же лицензии.

Данная лицензия вполне устраивает большинство разработчиков, при этом она помогла предотвратить использование ядра Linux, коллекции компиляторов GCC, стандартной библиотеки языка C (GNU C library, Glibc) и других важных программных компонентов в пропиетарных операционных системах с закрытым исходным кодом. Но лицензия GPL устраивает не всех: некоторые разработчики считают ее слишком строгой и предпочитают использовать лицензию BSD. В общем, данная лицензия гарантирует наличие перечисленных выше свобод распространения и модификации исходного кода программного компонента, но позволяет использовать его исходный код в составе исходного кода любого пропиетарного программного компонента с закрытым исходным кодом. Например, FreeBSD является свободной операционной системой, исходный код которой может загружаться и модифицироваться всеми желающими, но при этом существует ее версия с закрытым исходным кодом, которая используется в качестве прошивки консоли PlayStation 4.

Перед тем, как использовать лицензию GPL, рекомендуется ознакомиться с документом www.gnu.org/licenses/gpl-howto.html. Текст лицензии BSD доступен по ссылке http://opensource.org/licenses/BSD-2-Clause и содержит пункты, позволяющие вам избежать судебного разбирательства в том случае, если ваша программа работает некорректно - то есть, если кто-то будет использовать ваш код на атомной электростанции и этот код станет причиной серьезной аварии, никто не сможет обвинить в этой аварии вас. Кроме того, лицензия BSD гарантирует упоминание вашего имени в том случае, если ваш код будет использоваться в каких-либо сторонних проектах.

Если вы не желаете вводить какие-либо ограничения на использование кода и вас не заботит, будет ли упомянуто ваше имя при использовании вашего кода в сторонних проектах, вы можете распространять свой код как публичное достояние (www.unlicense.com). Также вы можете использовать лицензию Beerware (http://en.wikipedia.org/wiki/Beerware) в тексте которой можно прочитать: "вы можете делать с исходным кодом все что угодно, но если вы считаете его полезным и встретите меня при каких-либо обстоятельствах, купите мне пива".

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

Лицензия GPL является отличным выбором, но если вы желаете познакомиться с альтернативными лицензиями, посетите веб-сайт www.choosealicense.com

Лицензия GPL является отличным выбором, но если вы желаете познакомиться с альтернативными лицензиями, посетите веб-сайт www.choosealicense.com

Что насчет выбора языка программирования? Какой тулкит лучше выбрать?

Не стоит задавать таких вопросов - для того, чтобы полноценно ответить на них, нам придется раскрывать различные связанные с ними темы в течение как минимум года в рамках журнала Linux Voice. По этой причине мы не будем советовать вам использовать какой-либо язык программирования, тулкит или фреймворк, ведь каждый разработчик имеет свои предпочтения в данной области. Языки C и C++ важны для разработки приложений для окружения рабочего стола GNOME/GTK+ и KDE/Qt соответственно, при этом популярный язык Java также неплохо поддерживается в Linux. Некоторые приложения для окружения рабочего стола GNOME разработаны с использованием Vala, C#-подобного языка программирования с большим количеством дополнительных возможностей.

Если вы ранее не имели опыта программирования, но всегда хотели попробовать заняться этим, мы рекомендуем начать с языка программирования Python. Он имеет простой синтаксис и позволяет создавать приложения с интерфейсом командной строки, приложения с графическим интерфейсом и игры. Вы можете начать изучение этого языка программирования с простого онлайн-руководства для не-программистов, доступного по ссылке http://tinyurl.com/python3newbs и после того, как разберетесь в нем, сможете задуматься о создании утилит для окружения рабочего стола на основе PyGTK/PyQt или игр на основе PyGame. Если вы хотите, чтобы мы написали руководство по использованию какого-либо из перечисленных программных компонентов, дайте нам знать!

Разработка кода и привлечение сторонних разработчиков

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

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

Аналогичной проблемой, возникающей на начальных стадиях развития проекта, является уход из него разработчиков. Если у вас нет начальной кодовой базы и плана развития проекта, может случиться так, что сторонние разработчики будут пытаться развивать проект в различных направлениях, что повлечет за собой бесконечные споры, уход из проекта сторонних разработчиков и (возможно) форки. И все это может произойти еще до выпуска версии 0.1 приложения! Такие ситуации нередко возникали в прошлом и наверняка будут возникать в будущем

Крайне важно иметь на руках что-либо, что вы можете показать миру - даже если это самая примитивная версия разрабатываемого приложения. Попытайтесь выпустить версию 0.1 или 0.2 своими силами. Например, если у вас есть блестящие идеи относительно создания музыкального проигрывателя, но вам требуется дополнительная помощь для реализации его сложных функций, вы должны, по крайней мере, реализовать все базовые функции самостоятельно. Разработайте простейший музыкальный проигрыватель и добавьте элементы меню или кнопки панели инструментов для функций, которые вы планируете реализовать позднее. Таким образом вы сможете убедить потенциальных разработчиков вашего проекта в том, что вы обладаете необходимыми знаниями и возможностями для создания приложения.

Сразу же после начала разработки попытайтесь создать план разработки как минимум для двух или трех следующих выпусков приложения, но лучше до версии 1.0. Он поможет сторонним разработчикам лучше понять цели проекта и предотвратит бесконечный выпуск версий 0.xx (примером может служить проект стабильного и достаточно удобного векторного графического редактора Inkscape, который используется даже профессионалами, но на данный момент новейшей версией приложения является версия 0.48.2). Если некоторые из планируемых вами функций являются просто замечательными, но очень сложными в реализации, не опасайтесь продления срока их реализации до версии 2.0 для того, чтобы быстрее реализовать более простые функции и выпустить версию приложения 1.0.

Поиск сторонних разработчиков

После того, как вы выпустите версию 0.1, вам нужно будет каким-либо образом рассказать миру об этом. Раньше неплохим начальным вариантом являлся ресурс http://freshcode.club, на котором поддерживалась и постоянно обновлялась лента новых выпусков свободных проектов. Вы могли просто нажать на кнопку "Submit" на верхней панели, ввести имя проекта, строку URL его веб-страницы и его краткое описание. Также имелась возможность добавления тэгов, которые помогали пользователям найти ваш проект на веб-сайте. После заполнения формы нужно было нажать кнопку "Submit" в нижней части страницы для добавления информации о вашем приложении в ленту веб-сайта. К сожалению, на данный момент данный ресурс более не функционирует.

Лента ресурса Freshcode обрабатывалась многими сторонними веб-сайтами, поэтому в прошлом она являлась отличным каналом для распространения информации о свободных проектах. Если вы разрабатываете игру, вы можете разместить информацию о ней в Базе данных игр для Linux (Linux Game Database) по адресу www.lgdb.org - перед размещением информации об игре убедитесь в том ,что у вас имеются качественные снимки игрового процесса для привлечения максимального внимания! Если первая опубликованная версия вашего приложения уже содержит реализацию практически всех запланированных функций, вы можете разместить ссылку на веб-страницу проекта на ресурсе www.reddit.com/r/linux, но учтите, что в данном разделе постоянно появляется большое количество новых тем и ваша тема может попросту затеряться в том случае, если ваше приложение не будет интересовать максимальное количество пользователей.

После этого вы можете заняться более таргетированной рекламой вашего проекта. Создайте тему о первой выпущенной версии приложения на популярном форуме, таком, как www.linuxquestions.org/questions - подфорум "General" является лучшим местом для размещения этой темы. Явно укажите на то, что ваша программа является программой с открытым исходным кодом для того, чтобы созданная тема не была расценена как спам и попытайтесь в рамках нее привлечь сторонних разработчиков к своему проекту.

Важно четко написать о том, какая помощь требуется. Не пишите: "Пожалуйста, помогите с разработкой моего приложения!". Вместо этого перечислите функции и части кодовой базы, над которыми неплохо бы было поработать, а также укажите определенные файлы исходного кода и строки в них в случае необходимости. Никто не будет тратить несколько дней на чтение вашего кода в поисках определенного фрагмента; сторонние разработчики чаще всего хотят сразу же приступить к работе! Также вы можете создать подобные темы на других форумах, таких, как www.ubuntuforums.org и, разумеется, на форуме нашего журнала http://forms.linuxvoice.com.

Если вы хотите использовать в своем приложении различные изображения, но не владеете такими инструментами, как Inkscape или Krita, вы можете попросить помощи на форуме www.opengameart.org/forums/resource-requests. Разместите сообщение с пояснениями относительно проекта, над которым вы работаете, добавьте в него ссылку на его веб-страницу, а также четкие пояснения относительно того, какие изображения необходимы для его развития. Обратитесь к более ранним постам, если вам нужен пример оформления поста. Вы не получите ответ сразу же после размещения поста, но через несколько дней кто-нибудь обладающий необходимыми навыками вполне может выйти на связь с вами.

Наконец, свяжитесь с журналистами, пишущими о Linux! Ben Everard (ben@linuxvoice.com) ведет в нашем журнале колонку FOSSpicks, которая является отличной площадкой для представления публике новых проектов. Вы можете отправить ему ссылку на веб-страницу вашего приложения, которое уже работоспособно и может быть интересно читателям журнала LinuxVoice и, возможно, он сделает его обзор.

После того, как вы опубликуете первую версию своего приложения, вы можете разместить информацию о нем на ресурсе, аналогичном http://freshcode.club, для того, чтобы представить его широкой публике

После того, как вы опубликуете первую версию своего приложения, вы можете разместить информацию о нем на ресурсе, аналогичном http://freshcode.club, для того, чтобы представить его широкой публике

Добавление приложения в репозитории дистрибутивов Linux

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

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

В дистрибутиве Debian имеется список пакетов под названием WNPP (Work-Needing and Prospective Packages - Требующие доработки и будущие пакеты), расположенный по адресу www.debian.org/devel/wnpp. Вы можете использовать инструмент reportbug из состава Debian для отправки запроса на создание нового пакета. Выберите вариант 5 - RFP (request for package - запрос создания пакета) в качестве типа сообщения и составьте описание на основе шаблона, приведенного на соответствующей веб-странице. Хотя и нет никаких гарантий, что ваша программа будет добавлена в репозиторий пакетов программного обеспечения дистрибутива Debian, ведь на данный момент в упомянутом списке находится около 3400 запросов на упаковку различных программ, в любом случае стоит попытаться обратить внимание разработчиков дистрибутива на вашу разработку. Также стоит упомянуть о том, что после того, как ваша программа будет добавлена репозиторий дистрибутива Debian, она наверняка появится в дистрибутивах (K/X)Ubuntu, а также других дистрибутивах, основанных на Debian.

На этом все

Если вы будете помнить обо всем, о чем я рассказал выше, ваш проект начнет стремительно развиваться и через некоторое время вы получите помощь от разработчиков со всего света. По мере развития проекта вы сможете даже добавить кнопку сбора пожертвований на его веб-страницу - ведь нет ничего лучше, чем потягивать отличное кофе/пиво/вино, оплаченное одним из пользователей вашей программы.

И наконец, я хотел бы пожелать вам удачи и заранее поблагодарить вас за вклад в мир свободного программного обеспечения! Даже если вам требуется очень много времени для разработки проекта, не забывайте о том, что многие свободные проекты разрабатывались в свободное время в чьей-то спальне. Как говорится, каждый дуб когда-то был желудем