Софтуерът и софтуерната индустрия Радостин Раднев



страница1/14
Дата25.07.2016
Размер0.71 Mb.
#6825
  1   2   3   4   5   6   7   8   9   ...   14


Софтуерът

и

софтуерната индустрия



Радостин Раднев <radnev@yahoo.com>

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

Copyright (c) 2004 Radostin Radnev.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled „GNU Free Documentation License“.

Съдържание


1. Програма, изходен код и машинен код 4

2. Видове софтуер 8

3. Видове лицензи за свободен софтуер 11

4. Мотивация на разработчиците на свободен софтуер 15

5. Предпоставки за развитие на свободния софтуер 24

6. Кратка история на софтуера 30

7. Бизнес модели за свободния софтуер 40

8. Има ли безплатен обяд 46

9. Проблеми в софтуерната индустрия 53

10. Мигриране към свободен софтуер 60

Библиография 71

GNU Free Documentation License 74




1.Програма, изходен код и машинен код


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

Нека да разгледаме един пример, с който да илюстрираме разликата между изходния код и машинния код. Примерите са реализирани с помощта на езика Паскал2. Компилаторът, който е използван, е със свободен изходен код и може да бъде изтеглен безплатно от следния адрес http://www.freepascal.org/. Всъщност, цялата статия е реализирана изцяло с използването на свободен софтуер.

Program Calculator;
var

operand1 : real;

operand2 : real;

result : real;

operation : char;

error : string;

BEGIN

write('Въведете число: ');



readln(operand1);
write('Въведете операция: ');

readln(operation);


write('Въведете число: ');

readln(operand2);


error := '';
case operation of

'+': result := operand1 + operand2;

'-': result := operand1 - operand2;

'*': result := operand1*operand2;

'/': result := operand1/operand2;

otherwise error := 'невалидна операция';

end;
if error = ''

then writeln('Резултатът е: ', result:6:5)

else writeln('Грешка: ', error);
END.

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

Както виждате, изходният код на програмата е разбираем (разбира се, читателят трябва да има известни познания по английски език). За да преведем изходния код на машинен код, използваме командата fpc calculator.pp, която се явява компилатор на езика Паскал. Ето и самата сесия:

[radnev@localhost linux]$ fpc calculator.pp

Free Pascal Compiler version 1.0.10 [2003/06/26] for i386

Copyright (c) 1993-2003 by Florian Klaempfl

Target OS: Linux for i386

Compiling calculator.pp

Assembling calculator

Linking calculator

35 Lines compiled, 0.1 sec

[radnev@localhost linux]$

В резултат се получава изпълнимият файл calculator. Терминологията варира леко и може да срещнете други наименования, като двоичен файл3, машинен файл или най-използваното наименование програма. Ето част от съдържанието на изпълнимия файл или т.н. машинен код:

01111111 01000101 01001100 01000110 00000001 00000001 00000001 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000010 00000000 00000011 00000000 00000001 00000000 00000000 00000000

10000000 10000000 00000100 00001000 00110100 00000000 00000000 00000000

11111100 10110100 00000000 00000000 00000000 00000000 00000000 00000000

00110100 00000000 00100000 00000000 00000010 00000000 00101000 00000000

00000101 00000000 00000100 00000000 00000001 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 10000000 00000100 00001000

Нека да изпълним програмата, за да видим дали работи. Ето няколко изпълнения на програмата:

Въведете число: 23

Въведете операция: *

Въведете число: 45

Резултатът е: 1035.00000


Въведете число: 12345

Въведете операция: /

Въведете число: 23

Резултатът е: 536.73913


Въведете число: 2

Въведете операция: ^

Въведете число: 32

Грешка: невалидна операция


Въведете число: 345

Въведете операция: /

Въведете число: 0

Runtime error 200 at 0x08052F63

0x08052F63

0x080480B0


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

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

case operation of

'+': result := operand1 + operand2;

'-': result := operand1 - operand2;

'*': result := operand1*operand2;

'/': if operand2 = 0 -- Проверка за

then error := 'деление на нула' -- деление на

else result := operand1/operand2; -- нула

'^': begin

result := 1; -- Новата

for i := 1 to trunc(operand2) -- операция за

do result := result*operand1; -- степенуване

end


otherwise error := 'невалидна операция';

end;
След като компилираме програмата, изпълняваме я отново, за да видим дали работи. Ето няколко нови примера от изпълнението на програмата:

Въведете число: 34

Въведете операция: /

Въведете число: 0

Грешка: деление на нула


Въведете число: 2

Въведете операция: ^

Въведете число: 5

Резултатът е: 32.00000


Както се вижда от изложените примери, ако имаме изходния код на една програма и разбираме от програмиране, може сравнително лесно да оправим грешки и/или да добавим нова функционалност. При липсата на изходния код на програмата, очевидно, това е невъзможно.



Сподели с приятели:
  1   2   3   4   5   6   7   8   9   ...   14




©obuch.info 2024
отнасят до администрацията

    Начална страница