Moodle
sci.vanyog.com icon
Икона на Bible6
Компютърна
Библия 6

Download Mac download Linux 24b download Linux 23b download Android download Facebook

Бърз хостинг от 2.90 лева!

За програмите с отворен код

14:06:58 часа на  3 август 2011

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

Ако все още не знаете какво означава "отворен код", вижте статията в Wikipedia "Софтуер с отворен код" или статията на Радостин Раднев "Софтуерът и софтуерната индустрия". Ако Ви се чете нещо наистина изчерпателно за работа по програми с отворен код, но на английски, вижте Producing Open Source Software

Първо за отворените проекти изобщо

Най-важното при програмите с отворен код е, че те се правят, или поне би трябвало да се правят, от много доброволци, сплотени от идеята, че програмата, която създават е полезна за тях лично, а и за много други хора, които само я ползват, но не помагат пряко за направата й. Работата по програма с отворен код до голяма степен прилича на доброволната работа по други обществено полезни инициативи, например: опазването на околната среда, почистването на пространството пред блока, помагането на стари хора, болни, деца, останали без родители и т.н. В значителната си част такива дейности се изпълняват от институции, на които държавната система плаща, но никой не може да отрече, че полезни резултати дава и незаплащания от никого труд на доброволци. Аналогията със софтуера е, че както има комерсиален софтуер, създаден за да печелят фирмите от него, така има и свободен софтуер, създаден просто за полза на всички. Заради тази прилика по-нататък ще казвам "отворен проект" вместо "програма с отворен код", а и, още повече, мисля, че поуките и обобщенията, направени след наблюдения върху работата по програми с отворен код до голяма степен биха били полезни и за всички хора, предлагащи за реализиране идеи с обществена значимост, за които не може да се осигури търговско финансиране.

Отворените проекти са форма на един вид особена, отворена култура - култура на откритост и споделяне, култура на общуване. Отворените проекти издигат като ценност знанието, разкриването на всички тайни с цел развитието на всички хора, в противовес на поддържането на секретност в името на печалбата на знаещите в ущърб на незнаещите. Отворената култура е култура на уважение към всеки и даване възможност за развитие на всеки.

Точната дума, с която трябва да се нарича човек, представител на отворената култура е ХАКЕР. Моля, забравете негативната, но за съжаление разпространила се представа, че хакерите са криминални типове, които се занимават само с проникване в чужди компютри и кражби. Последните е по-точно да се наричат КРАКЕРИ. Прочетете "Как да стана хакер", за да разберете разликата.

Критерий за успех

Кога един отворен проект е успешен?

Според мен, когато този проект удовлетворява хората, които по един или друг начин се докосват до него, когато удовлетворява всички: както потребителите, така и разработчиците си и когато поради своята удовлетвореност тези хора продължават както да го ползват, така и да го подобряват.

Има много количествени показатели, по които може да се оценява успехът на един отворен проект:

  • Броят на изгеглянията, който говори за интереса към проекта и за броя на хората, които може би го ползват.
  • Съотношението между изказаните положителни и отрицателни мнения за проекта.
  • Общият брой на обажданията от потребители, който показва доколко потребителите се интересуват от проекта.
  • Броят на изтеглянията на изходния код, който показва до каква степен разработчици се интересуват как е направен проекта.
  • Общият брой на обажданията от разработчици с въпроси относно изходния код.
  • Броят на разработчиците.

Високи стойности на тези показатели, взети заедно, биха означавали, че е налична активност около проекта, както от страна на потребители, така и от страна на разработчици. Мисля, че именно наличието на висока активност около даден проект, е добър критерий за успех.

Ще се опитам да разкажа за изводите, до които съм стигнал, за това от какво зависи активността около даден проект и какви са възможностите за нейното повишаване.

От гледната точка на разработчик ще наблегна на това, какво следва да се прави, за да се привличат разработчици или други помагачи към даден проект. Както ще видите, около един отворен проект има голямо разнообразие от дейности. От възникването на идеята за нов проект до успешното му реализиране трябва да се извършат много неща, съобразени с различни фактори. Малко вероятно е един човек да притежава способността да направи всички необходими стъпки по-най правилния начин, а дори и да има такъв човек, едва ли той би имал желание или време да свърши сам цялата работа и при това напълно безвъзмездно. Ето защо привличането на участници и помагачи за различните дейности е много важно за постигането на успешен отворен проект.

Активността на потребителите

Активността на потребителите може да се измери с показатели като: брой посещения на страниците на програмата; брой изтегляния; брой изпратени коментари, предложения или запитвания.

Активността на потребителите по всяка вероятност най-силно зависи от качествата на програмата. Всеки потребител предпочита програмата, която използва, да е лесна за разучаване, лесна за използване и да върши бързо това, което потребителят очаква от нея, и, разбира се, още: да е надеждна, да не прекъсва с неразбираеми съобщения за грешки (да няма бъгове). Когато една програма показва такива качества, потребителите я теглят и използват. Впрочем, това са качества, каквито се изискват от всеки софтуер и те са краен резултат от правилното протичане на технологичния процес на създаване на софтуера. Как се прави софтуер с високо качество, е малко страничен въпрос спрямо това, което искам да споделя, затова няма да го разглеждам пряко, но въпросите, които ще засегна, имат за цел и това - създаване на качествен софтуер, който всеки би предпочитал да използва.

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

Подобно е положението и с идеите за подобрения. На всеки потребител може да му хрумне някое хитро нововъведение, което силно би улеснило ползването на софтуера, но ако този потребител не го предложи, то ще остане само в неговата глава и може никога да не бъде реализирано.

И така, важен въпрос е: как да се стимулират потребителите да търсят контакт с разработчиците?

Ето нещата, за които аз се сещам, а ако някой от читателите на тази статия се сеща и за други и ги предложи, за да попълним този списък, ще бъде чудесно.

  • Да се използва всяка възможност ненатрапчиво да се напомня за възможността за контакт, например с надписи, добавени на подходящи места, между съобщенията и надписите, които така или иначе софтуерът показва при своето функциониране.
  • Информацията за контакт (имейл адресите и имената на разработчиците) да е пълна, точна, актуална и лесна за намиране. Според мен е голяма грешка да се направи напълно анонимен проект с отворен код, в който никъде не е посочен неговият автор. Много е голяма опасността такъв проект да спре да се развива, да бъде изоставен и дори да бъде забравен от всички.
  • Никое обръщане на потребител към разработчик не трябва да остава без отговор. На всички запитвания или предложения трябва да се отговаря, защото едва ли има друго, което да разочарова потребителите по-силно от демонстрирано от разработчиците пренебрежение и липса на внимание към тях.
  • Изпращаните на потребителите отговори трябва да са на разбираем за тях език, в който се отбягва специална терминология, а ако се налага да се използва такава, тя да се обяснява популярно.
  • Доколкото е възможно, всеки диалог между потребители и разработчици трябва да бъде публичен, всяко запитване и отговор да се публикува в Интернет и да се вижда от всички. Това е необходимо поради няколко причини:
    • за да се избегне нежеланото повторение - едни и същи въпроси и отговори да се повтарят отново, и отново;
    • за да могат и хора, които не се решават, не искат или не могат, да изкажат своето отношение, също да намерят отговори на интересуващите ги въпроси, ако някой друг вместо тях вече ги е задал;
    • когато в публичното пространство (Интернет) се вижда, че се води диалог, това окуражава нови хора и те да вземат участие в него.
    Такава публичност на диалога се постига лесно, когато той се извършва чрез средства като: публични пощенски списъци, форуми, социални мрежи и т.н.

Започнах с активността на потребителите, но както вече посочих, тя е резултат от появата и поддържането на един успешен отворен проект, като в същото време тя е и условие за продължаване на съществуването и успеха на проекта. Преди обаче да се появи каквато и да било потребителска активност, трябва да има отворен проект.

Стартиране на отворен проект

Всеки отворен проект се появява, за да реализира определена полезна идея. На кого ще хрумне тази идея, дали тази идея е нова или не, не е от особено значение, важното е идеята да бъде обявена публично, за да достигне и да бъде приета от хора, които могат и искат да я осъществят.

Често се случва, че такава идея хрумва на някой програмист и той, движен от най-различни подбуди, започва и да я осъществява. Според мен е чиста случайност, че някои идеи се осъществяват направо като отворени проекти. В повечето случаи програмистите първо се опитват да извлекат материална изгода от труда си, и едва при наличие на други обстоятелства, работят върху отворени проекти. Така както е напълно естествено всеки човек да работи първо за заплата, с която да се издържа, и после да участва с доброволен труд в обществени мероприятия.

Така че, ако имате идея за програма, която бихте искали да е безплатна, не се бойте, че някой може да открадне тази идея, а веднага я съобщете на колкото се може повече хора. Дори и да сте програмист и да сте сигурни, че и без чужда помощ ще можете да направите програмата, за която имате идея, ако намерението Ви е наистина да стартирате програма с отворен код, пак започнете с огласяване на идеята, дори и преди да напишете и един ред код. Подходящи места за обявяване на такива идеи са специализирани сайтове като freshmeat.net, интернет форумите и социалните мрежи.

Съществуват специализирани сайтове за безплатно публикуване и работа по проекти с отворен код като: sourceforge.net, code.google.com, github.com и др. (Вижте резултатите на google от търсене с думите "open source hosting" за още информация за такива сайтове.) Ако имате намерение да стартирате отворен проект, то най-добре е да отделите време и положите малко усилия да се запознаете с възможностите, които предлага поне един от тези сайтове, да се регистрирате в него и да стартирате от самото начало проекта си там.

Трябва да си призная, че нито един от проектите, които съм започнал, не е започнат по такъв начин. Сега разбирам, че това е грешка и на тази грешка се дължи липсата на задоволяващ ме успех. При всеки нов проект силно ми се искаше "да си начеша крастата" на програмист, да опитам веднага възникналата идея, да си докажа, че мога... Грешка е, обуздавайте първия силен импулс за трескава работа, защото не винаги създаденото с такива мотиви се оказва качествено, а ако се свърши много работа на такъв етап, по-късно може да се окаже много по-трудоемко да се поправи. По-добре е да започнете да осъществявате идеята си, след като получите обратна информация от други хора за ценността на идеята, за евентуалните начини за осъществяване и т.н. Разглеждането на един проблем от различни гледни точки, води до по-ясното му разбиране и до намиране на по-адекватно решение.

Какво трябва за един отворен проект?

Един отворен проект се нуждае от някаква минимална инфраструктура (Интернет базирани инструменти):

  • интернет сайт, за публикуване информация за проекта, файлове за теглене, съобщения и др.;
  • подходящи средства за публична комуникация между потребители и разработчици - форум/и, пощенски списък/ци;
  • хранилище за колективна работа върху кода;

Стартирането на проект без наличие на такава инфраструктура е възможно, но неефективно, поддържането на проект без споменатите инструменти е трудоемко. Също така не е необходимо да се създава необходимата инфраструктура специално за всеки проект поотделно, след като има безплатни сайтове, които предоставят наготово необходимите инструменти и е достатъчно само те да се настроят.

Активността на разработчиците

Разработчици ще наричам всички тези хора, които полагат доброволен или спонсориран от някого труд, за да се появи и разпространи, а също и да продължи да се подобрява един отворен проект. Много често ролята на разработчик се изпълнява от един човек, но много по-добре е когато са повече, поради това, че работата по един отворен проект, за да бъде изпълнена качествено, е желателно да се разпредели между тесни специалисти с различен профил.

По същество работата по един отворен проект, освен по това, че се извършва безвъзмездно от една слабо обвързана помежду си общност, едва ли се различава много от работата по който и да било комерсиален софтуер, и може да включва всички, описани в учебниците по софтуерно инженерство елементи.

Ето едно примерно разделение на дейностите, изпълнявани от разработчици:

  • администриране на инфраструктурата: сайта, пощенските списъци, файловете за изтегляне, хранилището за код и т.н.
  • дизайн и поддържане на сайта на проекта;
  • организационна работа - набелязване на задачи, търсене на изпълнители, предлагане изпълнението на отделните задачи на конкретни изпълнители;
  • програмиране, т.е. писане и редактиране на код;
  • ревизиране на написания код;
  • писане на документация;
  • редактиране на документацията;
  • превеждане на интерфейса, документацията и сайта на други езици;
  • изготвяне на дистрибуции за различни операционни системи;
  • тестване и откриване на бъгове;
  • графичен и ергономичен дизайн;
  • маркетинг - разкриване на пътища за достигане до нови потребители;

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

Активността на разработчиците се измерва с броя на: изтеглянията на първичния код; изпратените мнения, запитвания и предложения по конкретни части от изходния код; разработчиците с достъп да актуализират хранилището с изходен код.

Условия, които влияят положително на активността на разработчиците са:

  • Стартиране с малък по обем, добре структуриран, лесен за разбиране изходен код, който може с малко усилия да се разгледа от други разработчици, които да изкажат мнението си, да предложат промени или сами да пожелаят да вземат участие в работа по проекта. Всяко отлагане на първото публикуване на изходния код, за по-късен етап, когато този код придобие повече функционалност, но и стане по-голям по обем и труден за проследяване, води до намаляване на вероятността за привличане на други програмисти.
  • Написаният програмен код да се разглежда поне от още един програмист, който да го ревизира и да прави бележки, и така чрез обсъждане да се уточни и установи приемлив от повече програмисти стил на програмиране и форматиране на кода.
  • Освен коментарите в самия код, да се поддържа и друга документация, предназначена за разработчици, например, общо описание на структурата на кода, различни ръководства за хакване (Hacking guides), списъци с често задавани въпроси и техните отговори (FAQ). (Хакване тук означава "подкарване" на дадена система, отстраняване на проблем, разбиране, как действа нещо, а не проникване в чужд компютър!)
  • Кратко и ясно да е обяснено какво трябва да направи един желаещ да работи участник, за да навлезе и започне избраната от него работа (някоя от изредените по-горе дейности).

...

Тази статия още не е завършена, но съм я сложил на сайта, защото се надявам темата да се окаже интересна. А още по-хубаво би било, ако читателите започнат да изпращат и свои мнения и допълнения по темата.