Кіріспе
Компьютерлік бағдарламаларды еркін жасау және жетілдіру. Ашық бастапқы кодты бағдарламалық жасақтаманы әзірлеу (OSSD) – ашық бастапқы кодты бағдарламалық жасақтаманы немесе оның бастапқы коды бәріне қолжетімді сондай бағдарламалық жасақтаманы, ашық бастапқы кодты бағдарламалық жасақтама жобасы арқылы әзірлеу процесі. Бұл – бастапқы коды ашық лицензия бойынша зерттеуге, өзгертуге және жақсартуға қолжетімді бағдарламалық өнімдер. Мысалы, танымал ашық бастапқы кодты бағдарламалық өнімдерге Mozilla Firefox, Google Chromium, Android, LibreOffice және VLC медиа ойнатқышы жатады.
Open source software development (OSSD) is the process by which open source software, or similar software whose source code is publicly available, is developed by an open source software project. These are software products available with its source code under an open source license to study, change, and improve its design. Examples of some popular open source software products are Mozilla Firefox, Google Chromium, Android, LibreOffice and the VLC media player.
Тарих
1997 жылы Эрик С. Реймонд «Кафедраль және базар» атты кітап жазды. Бұл кітапта Реймонд бағдарламалық жасақтаманы әзірлеудің екі түрін ажыратады. Біріншісі – дәстүрлі жабық кодты әзірлеу. Реймондтың пікірінше, бұл әдіс собор салуға ұқсас: орталықтандырылған жоспарлау, қатаң ұйымдастыру және бастапқыдан соңына дейін бірыңғай процесс. Екіншісі – прогрессивті ашық кодты әзірлеу, ол «әр түрлі мақсаттар мен тәсілдердің үлкен, шулы базарына ұқсайды, онда үйлесімді және тұрақты жүйе тек кереметтер тізбегі арқылы ғана пайда болуы мүмкін». Бұл метафора ашық кодты әзірлеу процесіндегі талқылаулардың маңыздылығын көрсетеді. Бар мен Фогельдің сөзіне сәйкес, екі стильдің арасындағы ең басты айырмашылық – қате туралы хабарламаларды және жаңа мүмкіндіктерді өңдеу (сондай-ақ жасау) және бағдарламашылардың жұмыс істеу шектеулері. Жабық кодты бағдарламалық жасақтаманы әзірлеу кезінде бағдарламашылар көп уақытын қате туралы хабарламаларды жасауға және өңдеуге, сондай-ақ мүмкіндіктерге түскен өтініштерді қарастыруға жұмсайды. Бұл уақыт одан әрі даму жоспарларын жасауға және оларға басымдықтар қоюға кетеді. Нәтижесінде, даму тобының бір бөлігі осы мәселелерге көп көңіл бөледі, ал нақты дамуға уақыт жетпейді. Сонымен қатар, жабық кодты жобаларда әзірлеу командалары басқарумен байланысты шектеулер (мысалы, мерзімдер, бюджеттер және т.б.) аясында жұмыс істеуге мәжбүр, бұл бағдарламалық жасақтаманың техникалық аспекттеріне кедергі келтіруі мүмкін. Ашық кодты бағдарламалық жасақтаманы әзірлеуде бұл мәселелер бағдарламалық жасақтаманың қолданушыларын даму процесіне тарту арқылы немесе тіпті осы қолданушыларға жүйені өздері құруға мүмкіндік беру арқылы шешіледі.
Үлгі
Ашық кодты бағдарламалық жасақтаманы әзірлеу бірнеше кезеңге бөлінеді. Бұл жерде сипатталған кезеңдер Шарма және авторлар еңбегінен алынған. Оң жақта ашық кодты бағдарламалық жасақтаманы әзірлеу процесінің дерек құрылымын көрсететін диаграмма келтірілген. Бұл суретте ашық кодты бағдарламалық жасақтаманы әзірлеу кезеңдері тиісті дерек элементтерімен бірге көрсетілген. Бұл диаграмма метамодельдеу және метапроцесс модельдеу техникаларын пайдалану арқылы жасалған.
Ашық бастапқы кодты жобалардың түрлері
Ашық бастапқы кодты жобалардың бірнеше түрі бар. Біріншіден, әртүрлі бағдарламалық жасақтамалар мен кітапханалар бар, олар жеке код бөліктерінен тұрады. Олардың кейбіреулері тіпті басқа ашық бастапқы кодты жобаларға тәуелді болуы мүмкін. Бұл жобалар белгілі бір мақсатқа қызмет етеді және нақты қажеттілікті қанағаттандырады. Мұндай жобалардың мысалдары – Linux ядросы, Firefox веб-браузері және LibreOffice кеңселік құралдар жиынтығы. Таратулар – ашық бастапқы кодты жобаның тағы бір түрі. Таратулар – ортақ мақсатпен бір көзден жарияланған бағдарламалық жасақтамалардың жиынтығы. «Таратудың» ең айқын мысалы – операциялық жүйе. Linux таратулары көп (мысалы, Debian, Fedora Core, Mandriva, Slackware, Ubuntu және т.б.), олар Linux ядросын көптеген пайдаланушылық компоненттермен бірге жеткізеді. ActivePerl сияқты басқа таратулар да бар, ол әртүрлі операциялық жүйелер үшін Perl бағдарламалау тілі, сондай-ақ Microsoft Windows үшін ашық бастапқы кодты бағдарламалардың Cygwin таратулары. BSD туындылары сияқты басқа ашық бастапқы кодты жобалар, операциялық жүйенің толық бастапқы кодын, ядроны және оның барлық негізгі компоненттерін бір нұсқауды басқару жүйесінде сақтайды; жүйенің барлығын бір команда ретінде бірге дамытады. Бұл операциялық жүйелерді дамыту жобалары өз құралдарын басқа тарату жүйелеріне қарағанда жақын біріктіреді. Соңында, кітап немесе жеке құжат жобасы бар. Бұл элементтер әдетте ашық бастапқы кодты бағдарламалық жасақтама жинағының бөлігі ретінде жеткізілмейді. Linux құжаттама жобасы Linux операциялық жүйесінің әртүрлі аспектілерін құжаттаған мұндай көптеген жобаларды қамтиды. Ашық бастапқы кодты жобаның осы түріне көптеген мысалдар бар.
Әдістер
Ашық бастапқы кодты жобаны су тасқыны сияқты дәстүрлі бағдарламалық жасақтама әдісімен жүргізу қиын, өйткені мұндай дәстүрлі әдістерде алдыңғы кезеңге оралуға рұқсат берілмейді. Ашық кодты бағдарламалық жасақтаманы әзірлеуде талаптар көбінесе жоба басталғанға дейін анықталмайды; оның орнына Роббинстің айтуынша, олар бағдарламалық өнімнің алғашқы нұсқаларына негізделеді. Талаптардан өзге, бағдарламалық өнімді әзірлеуге көмектесу үшін ерікті мамандар көбінесе бағдарламалық өнімнің алғашқы нұсқаларына сүйене отырып тартылады. Абрахамсон және авторлардың пікірінше, бұл желілік эффект маңызды: «Егер ұсынылған прототип жеткілікті назар аударса, ол бірте-бірте көбірек әзірлеушілерді тарта бастайды». Дегенмен, Абрахамсон және авторлар сондай-ақ, қоғам жабық кодты бағдарламалық жасақтама бизнесі сияқты өте қатал екенін атап көрсетеді: «Клиенттерді таба алсаңыз, тірі қаласыз, ал клиенттерсіз – қырыласыз». Фуггетта «жедел прототиптеу, ұлғаю және эволюциялық даму, спиральді өмірлік цикл, жылдам қолданбаларды әзірлеу және соңғы кезде экстремалды бағдарламалау және икемді бағдарламалық жасақтама процесі меншікті және ашық бастапқы кодты бағдарламалық жасақтамаға бірдей қолданылуы мүмкін» деп мәлімдейді. Ол сондай-ақ экстремалды бағдарламалауды ашық бастапқы кодты бағдарламалық жасақтаманы әзірлеу үшін өте пайдалы әдіс ретінде көрсетеді. Жалпы алғанда, барлық икемді бағдарламалау әдістері ашық бастапқы кодты бағдарламалық жасақтаманы әзірлеуге қолданылады, себебі олар итеративтік және ұлғаю сипатына ие. Басқа икемді әдістер де ашық және жабық бастапқы кодты бағдарламалық жасақтаманы әзірлеуде бірдей тиімді: мысалы, Интернет жылдамдығымен дамыту, оның қабылдаған таратылған даму принципіне байланысты ашық бастапқы кодты бағдарламалық жасақтаманы әзірлеуге қолайлы. Интернет жылдамдығымен дамыту географиялық тұрғыдан бөлінген командаларды «күндіз-түні жұмыс істеуге» пайдаланады. Бұл әдіс көбінесе ірі жабық кодты компаниялар қолданады (өйткені олар ғана әртүрлі уақыт белдеулерінде даму орталықтарын ұстауға мүмкіндік алады), бірақ ол ашық бастапқы кодты жобаларда да жақсы жұмыс істейді, өйткені көптеген еріктілер әзірлеген бағдарламалық жасақтама, әдетте, барлық уақыт белдеулерінде таралған әзірлеушілерге ие болады.
Байланыс арналары
Ашық бастапқы кодты жобаның әзірлеушілері мен пайдаланушылары міндетті түрде жобаға жақын жұмыс істемейді. Оларға электрондық байланыс құралдары қажет. Электрондық пошта – ашық бастапқы кодты әзірлеушілер мен пайдаланушылар арасындағы ең көп таралған байланыс түрі. Көбінесе, электрондық пошта тізімдері барлық мүдделі тараптарға бірден хабар жеткізілуін қамтамасыз ету үшін пайдаланылады. Бұл кем дегенде бір мүшеге жауап беру мүмкіндігін береді. Нақты уақытта байланысу үшін көптеген жобалар IRC сияқты жылдам хабар алмасу әдісін қолданады. Веб-форумдар соңғы кезде пайдаланушыларға ашық бастапқы кодты өнімді пайдалану кезінде туындайтын мәселелерге көмек алудың кең таралған тәсіліне айналды. Викилер әзірлеушілер мен пайдаланушылар үшін байланыс құралы ретінде жиі қолданылады.
Версияны басқару жүйелері
Ашық кодты әзірлеуде қатысушылар, көбінесе еріктілер, әртүрлі географиялық аймақтарда орналасқандықтан, қатысушыларға бастапқы кодты әзірлеуде ынтымақтасуға көмектесетін құралдар қажет. 2000 жылдардың басында Concurrent Versions System (CVS) ашық кодты жобаларда қолданылатын бастапқы кодты бірлесіп жасау құралының маңызды мысалы болды. CVS бірнеше адам бір уақытта жоба үстінде жұмыс істегенде жобаның файлдарын және кодтарын басқаруға көмектеседі. CVS бірнеше адамға бір файлды бір уақытта өңдеуге мүмкіндік береді. Бұл файлды пайдаланушылардың жеке каталогтарына көшіріп, пайдаланушылар жұмысын аяқтағаннан кейін файлдарды біріктіру арқылы жүзеге асырылады. CVS сонымен қатар файлдың бұрынғы нұсқасын оңай алуға мүмкіндік береді. 2000 жылдардың ортасында CVS-ті алмастыру үшін Subversion нұсқаны бақылау жүйесі (SVN) құрылды. Ол ашық кодты жобалардың нұсқасын басқару жүйесі ретінде жылдам дамып келеді, сондай-ақ Python бағдарламалау тілінде қолданылатын Mercurial да бар.
Қателерді бақылау және тапсырмалар тізімі
Көптеген ірі жобалар жобаны әзірлеу барысында туындайтын түрлі мәселелердің жай-күйін бақылау үшін қателерді тіркеу жүйесін талап етеді.
Сынау және жөндеу құралдары
Ашық кодты жобалар жиі интеграцияланатындықтан, жүйелік интеграция кезінде тестілеуді автоматтандыруға көмектесетін құралдар пайдаланылады. Мұндай құралдың мысалы – Tinderbox. Tinderbox ашық кодты жобаға қатысушыларға жүйелік интеграция кезінде қателерді анықтауға мүмкіндік береді. Tinderbox үздіксіз құрастыру процесін іске қосып, пайдаланушыларды бастапқы кодтың қай бөліктерінде мәселелер бар және олар қай платформаларда туындайтыны туралы хабарлайды. Дебьюгер – басқа бағдарламаларды жөндеуге (кейде сынауға немесе оңтайландыруға) арналған компьютерлік бағдарлама. GNU Debugger (GDB) – ашық кодты бағдарламалық жасақтаманы әзірлеуде қолданылатын дебьюгердің мысалы. Бұл дебьюгер қашықтан жөндеу мүмкіндігін ұсынады, бұл оны ашық кодты бағдарламалық жасақтаманы әзірлеуге ерекше қолайлы етеді. Жад ағуын анықтау құралы немесе жад дебьюгері – жад ағуларын және буфер асығуын табуға арналған бағдарламалау құралы. Жад ағуы – компьютерлік бағдарламаның қажетсіз жадты тұтынуының бір түрі, онда бағдарлама енді қажет емес жадты босата алмайды. Mozilla қолданған жад ағуын анықтау құралдарының мысалдары – XPCOM Memory Leak құралдары. Тексеру құралдары кодтың бөліктерінің белгіленген синтаксиске сәйкес келе ме екенін тексеру үшін қолданылады. Splint – тексеру құралының мысалы.
Пакеттерді басқару
Пакеттік басқару жүйесі – компьютерге бағдарламалық пакеттерді орнату, жаңарту, конфигурациялау және жою процесін автоматтандыруға арналған құралдар жиынтығы. Red Hat Package Manager (RPM) rpm форматы үшін, ал Advanced Packaging Tool (APT) deb файл форматы үшін, көптеген Linux дистрибутивтерінде қолданылатын пакеттік басқару жүйелері болып табылады.