Jak pomóc przy rozwoju otwartego oprogramowania?

Zapewne prawie każdy miał styczność z otwartoźródłowym oprogramowaniem i wiele osób używa na co dzień programów typu Gimp, Krita, Firefox, Blender czy nawet systemu Linux.

Z racji dostępności kodu źródłowego i możliwości jego modyfikowania oraz używania za darmo nawet w celach komercyjnych, wokół otwartoźródłowego oprogramowania wykształciła się społeczność, która pomaga tłumaczyć teksty czy naprawiać i tworzyć nowy kod.

Również i ty możesz dołączyć do tego grona osób pomagając przy rozwoju programów które lubisz i z których korzystasz.

Tłumaczenie

W przypadku gdy nie znamy się zbytnio na programowaniu i/lub rażą nas w oczy nieprzetłumaczone na język ojczysty(albo i też inny) teksty, to możemy pomóc to zmienić tłumacząc interfejs czy dokumentację.

Tłumaczenia zazwyczaj znajdują się w zewnętrznych serwisach np. Weblate, w których można rozpocząć proces tłumaczenia zaraz po rejestracji.

Przykładowe strony z tłumaczeniami: 
- Godot Engine - https://hosted.weblate.org/projects/godot-engine/godot/
- LibreOffice - https://translations.documentfoundation.org/
- Gnome - https://l10n.gnome.org/teams

Wymagania:
- Dobra znajomość przynajmniej dwóch języków, w tym angielskiego
- Poczucie dobrego "smaku" w tłumaczeniu

Zgłaszanie błędów

Jest to najbardziej podstawowy sposób na wsparcie projektu open source.

Przy zgłaszaniu ważne jest by dostarczyć jak najwięcej informacji o systemie, wersji aplikacji oraz sytuacji w jakiej błąd się pojawia itp. ponieważ z doświadczenia mogę powiedzieć, że im więcej szczegółów jest zawartych w zgłoszeniu, tym przeważnie szybciej zostaje on naprawiony.

Ważne jest również poprawne nazywanie zgłoszeń błędów, ponieważ bardzo często tytuły w stylu "Proszę Pomóżcie POMOCY!!!!" skutkują natychmiastowym zamknięciem wątku i często są ignorowane przez większość użytkowników, a z kolei tytuły typu "Po kliknięciu w przycisk pomoc pojawiają się 2 okna zamiast jednego" zawierają wystarczają wiele informacji, aby osoby które mogą i potrafią pomóc zainteresowały się tematem.

Przydatne jest dołączanie obrazów, gifów, wideo czy nawet możliwych rozwiązaniach problemu.

Podczas zgłoszeń błędów należy się kierować wcześniej przygotowanymi szablonami(jeśli oczywiście istnieją) ale w szczególnych przypadkach możemy nieco je modyfikować, jeśli to konieczne.

Należy pamiętać, że zgłoszenia powinniśmy tworzyć w języku angielskim, tak aby każdy mógł zrozumieć ich treść(możemy skorzystać z darmowego tłumacza https://www.deepl.com/translator)

Przykładowy szablon z silnika Godot Engine:

**Godot version:**

**OS/device including version:**

**Issue description:**

**Steps to reproduce:**

**Minimal reproduction project:**

Przykład bardzo dobrego zgłoszenia błędu 

Wymagania:
- Umiejętność zwięzłego i rzeczowego opisu problemu

Tworzenie kodu

Jest to chyba najtrudniejszy sposób pomaganie projektom open source lecz jednocześnie bez niego żaden nie mógłby się rozwijać. 

Zwykle dzieli się na dwa typy:
- Tworzenie/Usuwanie funkcji
- Naprawa istniejących błędów

Tworzenie czy usuwanie fragmentów kodu źródłowego zazwyczaj jest trudniejsze z tej dwójki ponieważ wymaga bardzo dobrej znajomości kodu i stylu w jakim został napisany tak aby się do niego stosować.

Naprawianie błędów bardzo często wiąże się z koniecznością dogłębnego poznania i zrozumienia kodu aby znaleźć fragment który nie działa poprawnie. 
Zdarza się jednak, że pobieżna analiza kodu w zupełności wystarczy.

Wiele błędów bierze się ze zwykłych literówek albo niepoprawnego używania narzędzi/operatorów danego języka.
Taki rodzaj błędów możemy w miarę prosto znaleźć za pomocą narzędzi tj. Cppcheck, Address i Leak Sanitizer czy Sonarcloud, które automatycznie skanują projekt w poszukiwaniu niepoprawnego kodu i wyświetlają listę w ich mniemaniu błędów, którą trzeba przejrzeć i ocenić czy się nie mylą.

Zazwyczaj tworzenie lub modyfikacja kodu źródłowego wiąże się z kilkoma powtarzającymi się czynnościami
- Zapoznanie się z zasadami tworzenia kodu/poprawek dla danego projektu 
https://github.com/godotengine/godot/blob/master/CONTRIBUTING.md

- Sklonowanie repozytorium 

git clone https://github.com/username/godot.git
cd godot
git remote add upstream https://github.com/godotengine/godot.git

- Zainstalowanie zależności(programów wymaganych do kompilacji aplikacji) 
Na Ubuntu można to wykonać zazwyczaj za pomocą trzech komend(jednak zalecane jest korzystanie z oficjalnej dokumentacji)

sudo sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list
sudo apt update

sudo apt build-dep -y godot

Na innych systemach musimy znaleźć instrukcję dostarczaną przez twórców programu 
https://docs.godotengine.org/en/latest/development/compiling/

- Testowa kompilacja 
Powinniśmy testowo przekompilować program, abyśmy byli pewni, że błędy które później mogą wystąpić są tylko winą naszych zmian.

scons p=linuxbsd -j8

- Naprawa błędu/dodanie kodu 
Tworzymy nową gałąź w Gicie na której będziemy zmieniać kod

git checkout -b "opengl_fix"

Następnie dodajemy wcześniej przez nas określoną funkcjonalność albo naprawiamy konkretny błąd, korzystając z różnych IDE np. VSCodium czy QT Creator.

- Kompilacja i sprawdzenie 
Po dodaniu/zmianie kodu musimy ponownie przekompilować kod i sprawdzić czy wszystko działa tak jak powinno. 
Jeśli są jakieś problemy to musimy naprawić nasz kod i spróbować ponownie.

- Dodanie plików do kolejki 
Należy sprawdzić jakie pliki zostały zmienione i dodać te, które chcemy zawrzeć w naszej poprawce.

git status
git add file1 folder2

- Tworzenie i wysłanie commita 
Po ukończonym tworzeniu poprawki możemy stworzyć commit, który będzie mógł zostać włączony do repozytorium. 
Musimy mieć na uwadze, że trzeba nadać mu dobry krótki tytuł.

git commit -m "Fixes problem with OpenGL driver on AMD cards"
git push --set-upstream origin opengl_fix

- Stworzenie PR 
Teraz poprzez webowy interfejs musimy stworzyć w Gitlabie, Githubie czy innym serwisie, PR z naszymi poprawkami zawierający w środku wyjaśnienie zmian.

Wymagania:
- Doświadczenie w pisaniu kodu w języku programowania używanego w projekcie
- Znajomość systemu kontroli wersji GIT
- Umiejętność dostosowania stylu pisania kodu do tego używanego w repozytorium
- Znajomość podstawowych komend w konsoli

Używanie

Chociaż może wydać się to dziwne, to nawet tylko używając otwartoźródłowe oprogramowanie możemy pomóc.

Tworzymy sobie nawyki, poznajemy interfejs programu, przyzwyczajamy się do niego, przez co jest większa szansa że z czasem będziemy chcieli innymi sposobami pomóc w jego rozwoju oraz to, że wybierzemy go zamiast komercyjnego programu

Wymagania:
- Ymmmm... No, używanie programu

Promowanie

W świecie bardzo ważna jest reklama i jedną ze skuteczniejszych form jest polecanie produktu/programu znajomym czy współpracownikom.

Dlatego jeśli lubisz korzystać z jakiegoś programu otwartoźródłowego, to bardzo dobrym pomysłem jest polecanie go innym osobom jeśli akurat potrzebują czegoś takiego.

Ważne jest aby w razie jakichś prostych problemów, te osoby mogłyby się zwrócić o pomoc do ciebie w ich rozwiązaniu.

Wymagania:
- Używanie programu
- Podstawowa wiedza o jego możliwościach i umiejętność korzystania z niego

Tworzenie dokumentacji

Często w razie pewnych problemów z programem lub szukaniem o nim konkretnych informacji sięgamy do jego dokumentacji.

Niestety zdarza się, że dokumentacja jest wybrakowana lub napisana niezrozumiałym dla wielu językiem, przez co osoby muszą tracić czas na odnajdywanie podstawowych informacji na własną rękę.

Zatem dla wielu projektów jednym z głównych celów powinno być stworzenie dokumentacji przyjaznej zarówno dla początkujących jak i zaawansowanych użytkowników, tak aby większość odpowiedzi na najczęściej nurtujące użytkowników pytania była w niej zawarta.

Bardzo ważnym jest aby dokumentacja nie zawierała wielu książkowych definicji, ale też miała sporo przykładów z życia wziętych.

Wymagania:
- Znajomość programu
- Umiejętność przekazywania informacji w zwięzły i prosty sposób

Artykuły i Poradniki

Często bywa, że dokumentacja jest niekompletna i nie zawiera odpowiedzi na częste pytania lub jest napisana zbyt trudnym językiem.

W takim więc wypadku, jeśli posiadamy wiedzę na temat danej funkcji programu, a z różnych powodów nie jesteśmy w stanie pomóc przy tworzeniu dokumentacji, wtedy dobrym pomysłem jest stworzenie własnego poradnika w którym mamy pełną swobodę zarówno w temacie jak i stylu pisania.

Wymagania:
- Znajomość konkretnych zagadnień z działania/konfiguracji programu
- Umiejętność pisania

Dotacje

Mimo, że przeważnie wolne oprogramowanie jest dystrybuowane za darmo, to nie znaczy, że ludzie pracując nad jego rozwojem nie dostają za to pieniędzy.

Takie projekty jak kernel Linux są finansowane przez ogromne firmy opłacające programistów do pracy nad nim, jednak istnieją mniejsze projekty takie jak Linux Mint, Krita czy Godot Engine, które są rozwijane w znacznym stopniu z dotacji zwykłych osób, których środki przeznaczane są na rozwój i poprawianie kodu programu oraz utrzymanie infrastruktury fizycznej(serwery, łącza itp.).

Zazwyczaj informacja o możliwych formach wsparcia znajduje się na stronie głównej projektu lub w repozytorium.

Wymagania:
- Trzeba mieć wolne środki na koncie

Podsumowanie

Oprogramowanie Open Source jest dobrem wspólnym używanym przez rzesze ludzi na całym świecie, które zapewnia nam wolność jaką nosi za sobą możliwość przeglądania, używania i modyfikacji kodu źródłowego aplikacji.

Mimo, że wątpliwe abyśmy sami z tego kodu bezpośrednio korzystali, to istnieją ludzie, którzy za nas(a czasami z naszą pomocą, do czego szczerze zachęcam) będą testowali, naprawiali i dostarczali nam aplikację mając na względzie zarówno naszą wygodę jak i dbając o naszą prywatność i bezpieczeństwo, które mogą być zagrożone poprzez używanie oprogramowania, do którego jedynie garstka osób ma dostęp.