02_wolne_oprogramowa..

Transkrypt

02_wolne_oprogramowa..
Wolne Oprogramowanie
i GNU Fortran
Wojciech Sobieski
Olsztyn 2007-2012
Wolne Programowanie
Wolne Oprogramowanie (Free Software) jest to ruch programistów i
użytkowników komputerów, zaangażowanych w działania na rzecz
swobodnego dostępu do oprogramowania przez ogół użytkowników.
Ruch Wolnego Oprogramowania powstał w latach 80., gdy dostępny
wcześniej wraz z otwartymi źródłami system operacyjny Unix został
skomercjalizowany przez firmę AT&T, co spowodowało odcięcie
dostępu do kodu źródłowego oraz jego swobodnego rozwoju. Sytuacji
tej przeciwstawił się Richard M. Stallman z Massachusetts Institute of
Technology, który zapoczątkował ruch na rzecz tworzenia „wolnego”
oprogramowania (czyli dostępnego dla wszystkich) pod nazwą GNU
(GNU's Not Unix). Richard M. Stallman był również założycielem
Fundacji Wolnego Oprogramowania (Free Software Foundation),
najważniejszej instytucji sponsorującej projekt GNU.
Wolne Programowanie
Zasadniczą cechą Wolnego Oprogramowania jest możliwość jego
dalszego rozpowszechniania i modyfikacji oraz pełna dostępność kodu
źródłowego. Szczegółowe zasady korzystania z Wolnego
Oprogramowania regulowane są przez kilka typów licencji, z których
najważniejszą jest powszechna licencja publiczna GPL (GNU General
Public License). Celem tej licencji jest przekazanie użytkownikom praw
do (tzw. 4 wolności):
1) uruchamiania programu w dowolnym celu,
2) analizowania działania programu
i dostosowywania go do swoich potrzeb,
3) kopiowania,
4) udoskonalania i publikowania własnych
poprawek i wersji.
Wolne Programowanie
Głównym celem projektu GNU było opracowanie systemu
operacyjnego kompatybilnego z systemem Unix. Aby zrealizować to
zamierzenie koniecznym stało się stworzenie w pierwszej kolejności
narzędzi dla programistów – tak właśnie narodził się projekt GCC.
GCC (GNU Compiler Collection) to zestaw kompilatorów tworzony w
ramach projektu GNU. Początkowo skrótowiec GCC oznaczał GNU
C Compiler, ponieważ był to kompilator tylko języka C.
Z czasem GCC zaczął obejmować inne języki programowania –
obecnie w ramach projektu rozwijane są kompilatory języków C, C++,
Objective C, Fortranu, Javy, Ady i eksperymentalnie wielu innych.
Kompilatory GNU Fortranu
G77 – kompilator języka Fortran 77 rozwijany w ramach projektu GCC
od roku 1987 (aż do wersji GCC 3.4.4 opublikowanej 18 maja 2005 r.).
Kompilator ten dostępny jest na systemy operacyjne Unix/Linux,
Windows i inne.
Kompilatory GNU Fortranu
Gfortran – kompilator języka Fortran 77 oraz 90/95 (z elementami
Fortranu 2003) stanowiący bezpośrednią kontynuację projektu g77.
Zmiana nazwy z g77 na gfortran obowiązuje w projekcie GCC od
wersji 4.0.1, wydanej oficjalnie 7 lipca 2005. Obecnie kompilator
gfortranu jest wiodącym projektem Wolnego Oprogramowania
związanym z językiem Fortran. Kompilator ten dostępny jest dla
systemów operacyjnych Unix/Linux, Windows oraz MacOS. Wersje
kompilatora gfortran na te systemy operacyjne dostępne są np. pod
adresem: http://gcc.gnu.org/wiki/GFortranBinaries.
Kompilatory GNU Fortranu
G95 – kompilator języka Fortran 77 oraz 90/95 (z elementami
Fortranu 2003), rozwijany niezależnie od projektu GCC. Projekt g95
powstał w roku 2000 i jest kontynuowany do chwili obecnej.
Kompilator g95 dostępny jest na platformy Unix/Linux, Windows i
inne. Wszelkie informacje o tym projekcie dostępne są na jego stronie
domowej: http://www.g95.org/.
W systemach Windows kompilatory GNU Fortranu dostępne są za
pośrednictwem środowisk MinGW lub Cygwin.
Kompilatory GNU Fortranu
MinGW (Minimalistic GNU for Windows) – jest to darmowy kompilator
dla systemów Windows. Podstawowymi jego składnikami są
kompilator GCC, zestaw programów „binutils” (zawierający m.in.
kompilator zasobów windowsowych „windres”) oraz zestaw plików
nagłówkowych i bibliotek charakterystycznych dla platformy Windows.
MinGW kompiluje kod źródłowy napisany w językach programowania
C, C++, Fortran 77, Java, Ada oraz Objective C, do kodu
wykonywalnego (EXE) lub, zależnie od potrzeb, plików obiektowych
(O), bibliotek statycznych (LIB, SO, O) lub bibliotek dynamicznych
(DLL). MinGW może kompilować większość programów
przeznaczonych dla systemu Windows.
Kompilatory GNU Fortranu
Programy skompilowane kompilatorem MinGW do komunikacji z
systemem operacyjnym (np. w celu narysowania na ekranie przycisku)
wykorzystują bezpośrednio standardowe biblioteki dynamiczne systemu
Windows, np. kernel32.dll, gdi32.dll. Dlatego programy te wyglądają i
zachowują się jak typowe aplikacje Windows, a pliki wykonywalne nie
wymagają dołączania żadnych dodatkowych bibliotek dynamicznych
specyficznych dla tego kompilatora. Jest to podstawowa cecha
odróżniająca MinGW od środowiska Cygwin.
Ponieważ kompilator MinGW charakteryzuje się niezwykle liberalną
licencją typu Public Domain, jest powszechnie wykorzystywany w
niekomercyjnych zintegrowanych środowiskach programistycznych dla
platformy Windows.
Kompilatory GNU Fortranu
Cygwin to implementacja standardu POSIX funkcji systemowych
przeznaczona dla systemów Windows (32-bitowe pełne wersje od MS
Windows 95 dla x86 z wyjątkiem MS Windows CE) oraz zestaw
oprogramowania w większości przeniesionego z systemów typu Unix
(np. Linux, BSD). Są to głównie aplikacje działające w trybie
tekstowym, ale dostępny jest również podsystem grafiki X.Org oraz
graficzne środowisko KDE. Projekt posiada wygodny w użyciu
program instalacyjny.
Cygwin jest rozwijany głównie przez oddział Cygnus Solutions firmy
Red Hat i dostępny na licencji GPL. Można również zakupić licencje
do użycia tego środowiska w systemach przeznaczonych do dystrybucji
pod innymi licencjami (na przykład wyłącznie w postaci
skompilowanej).
Kompilatory GNU Fortranu
Cygwin nie zastępuje w pełni np. Linuksa: nie wszystkie linuksowe
aplikacje można skompilować dla Cygwina, a te, które się da, na
Linuksie chodzą znacznie szybciej niż na Cygwinie. Należy go
traktować jako emulator systemu operacyjnego, który pozwala na
używanie wielu różnych użytecznych aplikacji z rodziny POSIX na
platformie Microsoft Windows – w tym także wiele z oprogramowania
FLOSS.
POSIX (Portable Operating System Interface) - dosłownie przenośny interfejs systemu operacyjnego.
POSIX powstał w celu standaryzacji różnych odmian systemu operacyjnego Unix i obejmuje interfejs
programisty, interfejs użytkownika oraz właściwości powłoki systemu operacyjnego.
FLOSS (Free Libre/Open Source Software, także FOSS, F/OSS) - neutralny skrót pozwalający objąć
jednym mianem zarówno Wolne Oprogramowanie (ang. Free Software) jak i Otwarte
Oprogramowanie (ang. Open Source), używany najczęściej w dokumentach urzędowych i oficjalnych
analizach.
Implementacje Fortranu
Najbardziej popularnymi implementacjami komercyjnymi są Intel Compiler
Fortran oraz Fujitsu Lahey Fortran. Pierwszy z tych kompilatorów
rozwijany był pierwotnie przez firmę Microsoft (pod nazwą Microsoft
Fortran Power Station) a następnie przez firmę Compaq (pod nazwą Compaq
Visual Fortran). Oba kompilatory dostępne są dla systemów Windows oraz
Unix/Linux. Warto nadmienić, że kompilator firmy Intel dystrybuowany jest
dla systemów Unix/Linux na bardzo liberalnej licencji, pozwalającej na
korzystanie z tego narzędzia w dość szerokim zakresie jedynie na podstawie
rejestracji.
Innym, znacznie mniej znanym kompilatorem języka Fortran, jest Salford
FTN95 Compiler. Produkt ten jest również dostępny w wersji Personal –
nie można go wykorzystywać w działalności komercyjnej lub w celach
badawczych. Kompilator Salford FTN95 przeznaczony jest dla systemów
Windows.
Implementacje Fortranu
Z niekomercyjnych implementacji języka Fortran można wymienić chociażby
Open Watcom Fortran, nFortran (obecnie chyba już nie rozwijany), czy też
opisane wcześniej kompilatory GNU Fortranu.
Kompilatory GNU Fortranu – ze względu na dostępny kod źródłowy i
liberalną licencję – dostępne są dla wielu różnych systemów operacyjnych, w
tym dla systemów Unix/Linux i Windows. Ze względu na odmienne cechy
tych systemów operacyjnych, wynikających ze sposobu ich rozwoju, inne są
nieco zasady wykorzystywania tych kompilatorów w obu grupach systemów.
Implementacje Fortranu
W systemach Windows kompilatory GNU Fortranu wykorzystywane są
zazwyczaj do budowy różnego typu środowisk programistycznych –
przykładami mogą być całkowicie darmowe projekty takie jak: Fortran
Force, VForth czy Edi.
W systemach Unix/Linux zazwyczaj oddziela się proces edycji kodu od
jego kompilacji: edycja odbywa się w dowolnym edytorze tekstu, zaś
kompilacja bezpośrednio w wierszu poleceń systemu operacyjnego.
Najwygodniejszym edytorem środowiska Linux jest program Kate: posiada
on wsparcie kolorowania składni języka Fortran oraz wbudowany wiersz
poleceń systemu. Oprócz Kate istnieje wiele innych edytorów nadających się
do tworzenia kodów źródłowych Fortranu, np. KWord czy Mined.
Implementacje Fortranu
Salford FTN95 Compiler (wersja Personal)
Implementacje Fortranu
Fortran Force 2.0 (GNU g77)
Implementacje Fortranu
VFort (GNU g77)
Implementacje Fortranu
Edi 3.0 (GNU g77, GNU g95, GNU gfortran, DISLIN)
Implementacje Fortranu
Edycja plików w programie Kate (gfortran, DISLIN)
Zalety GNU Fortranu
oszczędności – kompilatory GNU Fortranu są całkowicie darmowe, a
każdy użytkownik może je wykorzystywać w dowolnym celu (również
zarobkowym), w szkole, firmie czy instytucie naukowym – jest to
podstawą działania licencji GPL;
➔ brak problemu aktualizacji – w przypadku programów komercyjnych
zazwyczaj trzeba płacić za nowe wersje produktów. W przypadku
kompilatorów GNU Fortranu problem ten nie występuje – każdy
użytkownik może mieć zawsze najnowszą wersję;
➔ brak problemu „piractwa komputerowego” – możliwość dowolnego
kopiowania i redystrybucji kompilatorów GNU Fortranu rozwiązuje
problem legalności programów. Programy można po prostu rozdawać, co
ma duże znaczenia np. na uczelniach – każdy student może w domu
korzystać w dowolny sposób z tego samego oprogramowania, którego
uczy się na zajęciach;
➔
Zalety GNU Fortranu
dostępność – kompilatory GNU Fortranu są ogólnie dostępne. W
przypadku systemów Windows można łatwo pobrać z Internetu sam
kompilator (w postaci pliku instalacyjnego) lub jakieś środowisko
programistyczne na nim bazujące. W przypadku systemów Unix/Linux
należy pobrać i zainstalować odpowiednie pakiety instalacyjne (w formacie
obsługiwanym przez daną dystrybucję systemu operacyjnego) lub kod
źródłowy i samodzielnie dokonać kompilacji. W niektórych większych
dystrybucjach kompilatory Fortranu dostępne są bezpośrednio na płytach
instalacyjnych;
➔ dostępność darmowych środowisk programistycznych i edytorów
kodu – każdy użytkownik może przetestować dostępne środowiska
programistyczne i wybrać te, które okaże się dla niego najwygodniejsze i
najlepiej dostosowane do potrzeb. Użytkownik może również skorzystać
z dowolnego uniwersalnego edytora kodów źródłowych, wspierającego
język Fortran, i samodzielnie zbudować sobie własny zestaw
oprogramowania, bibliotek, przykładów i dokumentacji, tworząc
niepowtarzalne i oryginalne środowisko pracy;
➔
Zalety GNU Fortranu
duża stabilność – ponieważ każdy może zapoznać się z
ogólnodostępnym kodem źródłowym kompilatorów GNU Fortranu i go
poprawić lub zgłosić błąd, bardzo szybko eliminowane są wszelkiego typu
niedociągnięcia i wady, przez co nie ma potrzeby długiego czekania na
poprawki. W takim przypadku każdy użytkownik staje się testerem
programu, co daje w efekcie bardzo dużą ich liczbę, nieporównywalnie
większą niż w przypadku oprogramowania komercyjnego (zamkniętego);
➔ duże bezpieczeństwo – ze względu na możliwość wglądu w kod
źródłowy kompilatorów GNU Fortranu, praktycznie nie ma możliwości
„zaszycia” w nich modułów wykonujących w systemie operacyjnym
niepożądane działania;
➔
Zalety GNU Fortranu
brak zagrożenia zmianą rodzaju licencji – w przypadku kompilatorów
GNU Fortranu nie ma możliwości zmiany rodzaju licencji. Jeżeli ktoś w
swoim programie użyje chociaż fragment kodu źródłowego Wolnego
Oprogramowania, to zgodnie z licencją GPL musi swój produkt
rozprowadzać wraz z kodem źródłowym. W przypadku innych
darmowych produktów, np. na licencji FREEWARE, może ona się
zmienić w dowolnej chwili w inne: SHEREWARE, a później
PAYWARE;
➔ możliwość
przeniesienia kompilatora do innego systemu
operacyjnego – posiadanie kodu źródłowego programu pozwala również
na dokonywanie samodzielnych kompilacji, przy czym nie ma znaczenia w
jakim systemie operacyjnym się to odbędzie. Tak waśnie było z
kompilatorami GNU Fortranu stworzonymi pierwotnie dla systemu Unix,
a dostępnymi obecnie dla wielu innych systemów operacyjnych;
➔
Zalety GNU Fortranu
łatwość przenoszenia kodów źródłowych między różnymi
systemami operacyjnymi – ponieważ kompilatory GNU Fortranu
występują w takich samych wersjach dla wielu systemów operacyjnych, nie
ma większych problemów z przeniesieniem, kompilacją i uruchamianiem
swoich programów w środowiskach Windows, Unix/Linux czy MacOS;
➔ możliwość dostosowania do własnych wymogów – otwarty kod
źródłowy pozwala na dowolną jego modyfikację, przy czym zgodnie z
licencją GPL, nie trzeba nikogo prosić o zdanie ani nikogo o tym fakcie
zawiadamiać. W świecie Wolnego Oprogramowania każdy posiadacz
kodu źródłowego ma takie same prawa i możliwości.
➔
Wady GNU Fortranu
brak gwarancji – ponieważ kompilatory GNU Fortranu tworzone są
przez wielu programistów, często w bardzo odległych częściach świata,
nie ma od kogo wymagać gwarancji w przypadkach awaryjnych (jest to
zresztą sprzeczne z ideą Wolnego Oprogramowania);
➔ brak profesjonalnej opieki – jest to podstawowy problem ruchu
Wolnego Oprogramowania, w tym użytkowników kompilatorów GNU
Fortranu. W przypadku niejasności związanych z użytkowaniem
kompilatorów GNU Fortranu jedyną podstawą rozwiązywania
problemów są informacje zawarte w Internecie (np. dokumentacja
projektu GCC) oraz znajomi, którzy posługują się podobnym
oprogramowaniem. Bardzo pomocne są w tym zakresie specjalistyczne
serwisy internetowe i fora dyskusyjne;
➔
Wady GNU Fortranu
brak polskiej dokumentacji – jak dotąd kompilatory GNU Fortranu
rozwijane są głównie w oparciu o język angielski: cała dokumentacja i
wszelkie dostępne materiały są w tym języku. Jedynym obszernym
opracowaniem dotyczącym GNU Fortranu w języku polskim jest książka
„GNU Fortran z elementami wizualizacji danych”.
➔ brak wbudowanych bibliotek i rozszerzeń
– kompilatory GNU
Fortranu umożliwiają korzystanie ze standardowych elementów języka
Fortran. Istnieje co prawda możliwość dołączenia dodatkowych
składników (bibliotek, przykładów, dokumentacji), ale zazwyczaj
użytkownik musi to zrobić samodzielnie. Cecha ta może stanowić
zarówno zaletę (środowisko można lepiej dopasować do swoich potrzeb),
jak i wadę (wszystkie modyfikacje należy wykonywać samodzielnie);
➔
Wady GNU Fortranu
➔
brak możliwości programowania równoległego – jak do tej pory
kompilatory GNU Fortranu umożliwiają tworzenie programów
jednowątkowych, co w epoce komputerów wieloprocesorowych stanowi
pewne ograniczenie. W Internecie można jednak znaleźć informacje
świadczące o rozpoczęciu prac w tym kierunku.
Szybkość GNU Fortranu
Porównanie czasu wykonywania się podstawowych operacji matematycznych w
programach skompilowanych różnymi kompilatorami
Szybkość GNU Fortranu
Porównanie czasu działania przykładowego programu skompilowanego różnymi
kompilatorami GNU Fortranu
Zmienne środowiskowe
Każdy system operacyjny posiada konkretny zbiór poleceń możliwych
do wywołania z dowolnego miejsca w strukturze katalogów.
Przykładem może być polecenie DIR w systemie DOS lub Windows,
lub też polecenie LS w systemach Unix/Linux – oba wyświetlają
bieżącą listę plików i katalogów.
Użycie polecenia spoza tego zbioru spowoduje wyświetlenie
komunikatu błędu, np:
Nazwa 'polecenie' nie jest rozpoznawalna jako polecenie
wewnętrzne lub zewnętrzne, program wykonywalny lub plik
wsadowy.
Zmienne środowiskowe
Generalnie istnieją trzy możliwości reakcji systemu operacyjnego na
podanie dowolnej komendy:
jeżeli polecenie jest poleceniem systemowym, system operacyjny
wykona je bezpośrednio;
➔ jeżeli polecenie nie jest poleceniem systemowym, system operacyjny
przeszuka wszystkie katalogi znajdujące się w specjalnej zmiennej
środowiskowej (najczęściej o nazwie PATH) – jeżeli znajdzie tam
plik wykonywalny lub plik wsadowy powłoki, to go uruchomi;
➔ jeżeli polecenie nie jest poleceniem systemowym, a w katalogach
znajdujących się w zmiennej PATH nie ma pliku wykonywalnego
lub skryptu powłoki o takiej nazwie jak polecenie, system
operacyjny zgłosi błąd.
➔
Zmienne środowiskowe
Zmienna środowiskowa jest to ogólnie dostępna w systemie
operacyjnym zmienna, zawierająca pewne informacje przydatne w pracy
innych programów. Zmienne środowiskowe mogą być tworzone lub
modyfikowane przez system operacyjny, przez instalowane w nim
dodatkowe oprogramowanie lub też ręcznie przez użytkownika.
Zmienne środowiskowe
Zmienne środowiskowe są wykorzystywane w procesie kompilacji
kodów źródłowych różnych języków programowania, w tym również
języka Fortran. Przykładowe polecenie kompilacji kompilatorem GNU
Fortranu ma postać:
g77 program.for -o program.exe
Ponieważ polecenie „g77” nie jest poleceniem systemowym,
sprawdzane są katalogi znajdujące się w zmiennej PATH. Oznacza to,
że położenie kompilatora tego języka – a konkretnie pliku
wykonywalnego o nazwie „g77.exe” – musi być dokładnie określone w
zmiennej PATH.
Zmienne środowiskowe
W procesie kompilacji ważną rolę odgrywa również zmienna
LIBRARY_PATH (w systemach Windows) lub LIB (w systemach
Unix/Linux). Zmienna ta zawiera listę katalogów, które mają być
przeszukiwane w przypadku żądania kompilatora o dołączenie
dodatkowej, nieznanej biblioteki. Zagadnienie „wyszukiwania”
kompilatora i jego bibliotek może być rozwiązane na dwa sposoby:
•
•
kompilator i jego biblioteki instaluje się w dowolnym katalogu, po
czym nazwy tych katalogów dodaje się do zmiennych
środowiskowych – takie podejście przeważa w systemach Windows,
kompilator i jego biblioteki umieszcza się w specjalnie do tego celu
przeznaczonych katalogach systemowych (nie trzeba wówczas
tworzyć lub ustawiać zmiennych środowiskowych, gdyż zawierają
one już te katalogi) – takie podejście przeważa w systemach
Unix/Linux.
Zmienne środowiskowe
Przykład definicji zmiennych systemowych w systemach Windows:
SET PATH=c:\progra~1\edi\g77;%PATH%
SET LIBRARY_PATH=c:\progra~1\edi\g77;%LIB%
g77.exe program.for -a -O -o program.exe
Przykład definicji zmiennych systemowych s systemach UNUX\Linux:
PATH = sciezka_1: scieka_2: ...: $PATH
export PATH
Zmienne środowiskowe
Zapytanie o zmienną systemową w systemach Windows:
set
set PATH
- wszystkie zmienne
- tylko zmienna PATH
Zapytanie o zmienną systemową w systemach UNUX\Linux:
printenv
echo $PATH
- wszystkie zmienne
- tylko zmienna PATH
Dziękuję za uwagę
Wojciech Sobieski
Olsztyn 2007-2012

Podobne dokumenty