Софтуер

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

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

В масовите електронноизчислителни машини (компютри) голяма част от софтуера е разположена на външна памет и може лесно да бъде променяна от потребителите според нуждите им. Инструкциите в централните процесори и специализираните интегрални схеми обаче се задават при програмирането им, и не могат да бъдат променяни директно от потребителя.

По принцип хардуерът е неизползваем без програмно осигуряване или софтуер. Най-ясно разликата между софтуер и хардуер се обяснява така: Хардуерът е всяко едно видимо и осезаемо устройство, както самият компютър, така и всяко едно периферно устройство. Софтуерът е само видим, но не и осезаем, когато работи – това са именно програмите.

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

Езикът за програмиране от високо ниво може да бъде и скриптов език. Когато е написан на скриптов език, се компилира при изпълнението на програмния код (интерпретиране). Скриптовете обикновено са малки до средно големи програми, които изпълняват потребителски команди или вършат действия в определен ред. Пример за това са JavaScript, Perl, Tcl или PHP. Програмите, писани на скриптов език, са по-бавни при стартиране (защото всеки път програмният код трябва да се преведе на машинен език), но обикновено по-лесно и бързо се разработват и тестват.

Видове софтуер

Системен 

Към системния софтуер се отнасят програми, изпълняващи системни функции и грижещи се за компютърния хардуер и връзката между него и потребителя. Предназначението на системния софтуер е да освободи авторите на приложни програми от пряко взаимодействие с компютърния хардуер, който е много разнороден. Той дава достъп до хардуера, който е унифициран и независим от начина на работа на конкретните устройства.
Операционна система
Фърмуер
 Инструментален софтуер
В инструменталния софтуер са включени програми, които осигуряват средства за използване и обслужване на компонентите на компютъра, както и средства за разработване на програми и различни приложения. В тази група попадат сервизните програми (Utilities), които осигуряват диагностика, управление на устройства, презапис от един на друг носител, архивиране, антивирусни програми и др. Програмните езици също са в тази категория.

Приложен 

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

Разработване

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

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

 Декомпилатор
Това е софтуер, който разединява на съставни фрагменти дадена компилирана програма.

Основен инструмент на кракерите.

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

 Други
Понякога са необходими и други инструменти като:
 програма за съединяване на основния код с използваните библиотеки (linker)

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

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

Стандартизация

Качество и надеждност 
 Основна статия: надеждност на софтуера

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

Лицензите предоставят на потребителя правото да ползва софтуера при определени условия. Предоставянето на това право обикновено става в рамките на няколко широко прилагани модела:
 Платен софтуер: Потребителят заплаща еднократно или периодично определена сума на автора на софтуера. Това е най-често срещаният модел при софтуера, разработван със стопанска цел.
 Шеъруер: Потребителят ползва софтуера без заплащане в рамките на някакви ограничения – на функционалността, на времето за ползване или на приложението (например, само за лични цели). Шеъруерът често представлява ограничена демонстрационна версия на платен софтуер, която има за цел да убеди потребителите в ползата от закупуването на пълен платен лиценз.
 Адуер: Потребителят не заплаща пряко за ползването на софтуера, но в него се включва рекламно съобщение – банер (плакат), текст или звук. При някои от тези програми, подобно на шеъруера, съществува платена версия, в която няма реклами.
 Безплатен софтуер: Потребителят не заплаща за ползването на софтуера. Най-често това са програми, даващи достъп до друга платена услуга или разширяващи възможностите за нейното използване (например, популярният браузър Internet Explorer).
 Свободен софтуер: Безплатен софтуер с отворен код, който потребителят може да променя и препубликува при определени условия (обикновено, запазване на условията за ползване на първоначалния софтуер).

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

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

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

Сред най-големите софтуерни компании са Майкрософт, Оракъл, Новел, Ес А Пе, Симантек, Адоби Систъмс, Корел. В софтуерния сектор работят и много организации с нестопанска цел, най-влиятелните сред които са Фондацията за свободен софтуер, Проектът Гну, Фондация Мозила. Освен това съществуват и редица организации, като W3C и IETF, разработващи стандарти за взаимодействие между софтуера.

Вижте също 

 Свободен софтуер
 Софтуерен патент
 Софтуерен лиценз
 Езици за програмиране
 Програмиране
 Софтуерни метрики
 Хардуер
 Програмно осигуряване