Software

[miniatura|Diagrama que amosa como o usuario interactúa coas [Aplicación informática|aplicacións informáticas nun ordenador persoal típico. A capa da aplicación informática relaciónase co sistema operativo, que á súa vez comunícase co hardware. As frechas indican o fluxo de información.]]
En informática, a palabra inglesa **software** (a forma recomendada en galego é soporte lóxico) utilízase para describir a parte non física ("lóxica") do ordenador, tamén chamada programa ou aplicación informática.

Chámase así en contrapartida á parte física da computadora, o hardware (monitor, teclado, rato, escáner...etc), que é o que fai que os programas se poidan executar e o usuario poida *interaccionar* co ordenador. O software é o código compilado que se transforma en aplicacións utilizables, que poden ser ofimáticas, de deseño, multimedia etc.

O software de ordenador (ou sinxelamente, software) refírese a un ou máis programas de ordenador e os datos almacenados para algún propósito concreto. O software permite o funcionamento programado previamente *codificado*, xa sexa dando instrucións de xeito directo, a través de instrucións ao hardware (a parte física), ou servindo como entrada a outro programa. O software de tratamento de datos existe só para o seu uso eventual por outro *software de programa*.

O termo *software* foi usado por primeira vez neste senso por John W. Tukey en 1957; de xeito coloquial, o termo utilízase frecuentemente para designar aplicacións, utilidades, o sistema operativo etc.. En informática e enxeñaría de software, software é toda a información procesada polo sistema informático, programas e datos.

## Definición de software 
[miniatura|175px|Retrato de [Charles Babbage, introdutor do concepto de programa.]]
Existen varias definicións similares aceptadas para software, pero probablemente a máis formal sexa a seguinte:

Considerando esta definición, o concepto de software vai máis aló dos programas de computación nos seus distintos estados: código fonte, binario ou executable; tamén a súa documentación, os datos a procesar e mesmo a información de usuario forman parte do software: é dicir, *abarca todo o intanxible*, todo o «non físico» relacionado.

O termo «software» foi usado por primeira vez neste sentido por John W. Tukey en 1957. Na enxeñaría de software e as ciencias da computación, o software é toda a información procesada polos sistemas informáticos: programas e datos.

*O concepto* de ler diferentes secuencias de instrucións (programa) desde a memoria dun dispositivo para controlar os cálculos foi introducido por Charles Babbage como parte da súa máquina diferencial. *A teoría* que forma a base da maior parte do software moderno foi proposta por Alan Turing no seu ensaio de 1936, «On Computable Numbers, with an Application to the Entscheidungsproblem» (en galego, "Os números computables, cunha Aplicación ó Entscheidungsproblem"), cunha aplicación ao problema de decisión.

## Historia 
[miniatura|Estatua en homenaxe a Alan Turing, situada nos Xardíns de Whitworth, [Manchester (Inglaterra).]]
A primeira teoría sobre o software foi proposta por Alan Turing no seu ensaio do 1935 denominado "On Computable Numbers, with an application to the Entscheidungsproblem" (Sobre os números calculables, cunha aplicación ó *Entscheidungsproblem*) O termo "software" foi utilizado por primeira vez nun documento impreso en 1958 por John Tukey nun artigo publicado na revista de matemáticas *American Mathematical Monthly*. Coloquialmente, o termo utilízase a miúdo no sentido de software de aplicación. En informática e en enxeñaría de software, o software é toda a información procesada por un sistema informático, os programas e os datos. No ámbito académico o estudo do software inclúese dentro dos campos da informática e a enxeñaría de software actual.

A miúdo considérase que a historia dos programas informáticos remóntase ata o primeiro erro de software, en 1946. Como que cada vez hai máis programas que pasan a formar parte do mundo do firmware debido a que o hardware faise cada vez máis pequeno, máis barato e máis rápido debido á lei de Moore, hai elementos que antes eran considerados como software que hoxe en día pasaron ao dominio do hardware. A maioría das compañías de hardware actuais teñen máis programadores de software en nómina que deseñadores de hardware, posto que as ferramentas de software automatizaron moitas das tarefas dos enxeñeiros que crean os circuítos impresos.

Do mesmo xeito que o fixo a industria automotriz, a industria do software evolucionou a partir duns poucos visionarios que traballaban con prototipos no seu garaxe. Steve Jobs e Bill Gates foron o Henry Ford e o Louis Chevrolet da súa época, que aproveitaron e capitalizar as ideas xa coñecidas antes de que iniciasen o seu negocio. No caso do desenvolvemento de software, acéptase de maneira xeneralizada que o momento inicial foi a publicación na década de 1980 das especificacións do IBM Personal Computer por parte do empregado de IBM Don Estridge. Hoxe este movemento podería verse como un tipo de *crowdsourcing* (subcontratación aberta).

Ata este momento, o software era *empaquetado* xunto co hardware polos OEM (fabricantes de equipos orixinais), como Data General, Digital Equipment ou IBM. Naquel momento, cando un cliente compraba un miniordenador, o ordenador máis pequeno da época, o equipo non viña con ningún software preinstalado, senón que tiña que ser instalado por enxeñeiros empregados polo OEM. A maioría das empresas tiñan o seu software nos catálogos sen prezo, de forma que non se podía considerar como un activo (de maneira similar a algúns casos de música popular de hoxe en día). Cando Data General presentou o seu miniordenador de 16 bits chamado *Data General Nova*, unha compañía chamada Digidyne quixo utilizar o seu sistema operativo RDOS (*Real-time Disk Operating System*) no seu propio clon do hardware. Data General negouse a licenciar o seu software (cousa que era difícil, posto que era publicado como un ben libre), e reclamou os seus dereitos. A Corte Suprema creou un precedente chamado *Digidyne v. Data General in 1985* e finalmente Data General viuse obrigada á concesión de licenzas de software do sistema operativo, posto que se fallou que a restrición da licenza ao hardware de Data General era ilegal. Pouco despois, IBM publicaba o código fonte do seu sistema operativo de disco de maneira gratuíta, e naceu Microsoft. Data General acabou sendo absorbida por EMC Corporation ao ser incapaz de soportar as perdas causadas polos honorarios dos avogados. A decisión da Corte Suprema permitiu valorar o software e tamén comprar patentes de software. Naquel momento a decisión de IBM de publicar o código era case como unha protesta. Poucos dentro da industria crían que alguén fóra da mesma IBM (grazas á publicidade gratuíta da súa decisión) podería chegar a sacar algún beneficio. Microsoft e Apple foron capaces de sacar proveito dos produtos *software*. Hoxe en día faise difícil de imaxinar que houbo unha vez que a xente pensaba que o software non valía nada sen unha máquina. Hoxe en día hai moitas empresas de éxito que venden só produtos de software, a pesar de que habitualmente aínda hai moitos problemas relacionados coa concesión de licenzas debido á complexidade dos deseños e á pouca documentación, o que leva ás patentes trol.

Coas especificacións de software de código aberto e a posibilidade de concesión de licenzas de software, apareceron novas oportunidades para ferramentas de software que despois se converteron en estándares *de facto*, por exemplo DOS para os sistemas operativos, pero tamén diferentes sistemas propietarios de tratamento texto e follas de cálculo. Seguindo un patrón de similar, os métodos de desenvolvemento propietarios xeraron metodoloxías estándar de desenvolvemento de software.

## Clases de software 
[miniatura|150px|Logo do [sistema operativo Linux.]]
Calquera ordenador moderno de uso xeral (en oposición aos sistemas embebidos) ten varias "capas" de software que realizan cada unha certas tarefas determinadas. Divídense habitualmente en tres categorías principais:
; Software de sistema: O software de sistema inclúe o sistema básico de entrada e saída ("BIOS", chamado tamén *firmware* en vez de *software*), os controladores dos dispositivos, un sistema operativo e, normalmente, unha interface gráfica de usuario ("GUI") que, en conxunto, lle permiten ao usuario poder *interaccionar* co ordenador e os seus periféricos. O software de sistema ven normalmente co ordenador e quen ten coñecementos de informática só "a nivel de usuario" non é consciente sequera de que existe.
; Software de aplicación: O software de aplicación permítelle ao usuario realizar unha ou máis tarefas concretas, como as aplicacións de ofimática coas que é posíbel redactar documentos (procesador de textos), realizar cálculos en follas de cálculo, ou xogar cos videoxogos. O software de aplicación cómprase á parte ou descárgase de Internet. Nas aplicacións é no que a maior parte da xente pensa cando se fala de software.
; Software de usuario: O software de usuario adecúa os sistemas ás necesidades específicas de cada usuario. Inclúe os modelos de follas de cálculo, as *macros* dos procesadores de texto, as simulacións científicas, os gráficos e os guións. Mesmo os filtros de correo son un tipo de software de usuario. É fácil pasar por alto a súa importancia real.

## Linguaxes de programación 
[miniatura|230px|Código fonte dun programa escrito na [java (linguaxe de programación)|linguaxe de programación java.]]
Para introducir ordes na computadora temos que usar unha linguaxe específica coñecida como linguaxe máquina, que consiste en longas cadeas de números binarios (1s e 0s). Esta linguaxe, que a computadora entende directamente, é excesivamente complicada para unha persoa. 
Para facer o traballo máis fácil os primeiros operadores de computadoras decidiron pór nomes mnemónicos ás instrucións que antes só se especificaban con códigos binarios. Esta nova linguaxe denominárona linguaxe ensambladora. Así por exemplo, para sumar úsase a instrución "add". Escribir en linguaxe ensamblador é equivalente a facelo en linguaxe máquina, pero as instrucións son máis fáciles de lembrar xa que non se se escriben como unha serie de números.

A medida que foi aumentado a complexidade dos programas escritos en ensamblador fíxose necesario dispor dunha linguaxe máis potente e sinxela. Entón, creáronse as linguaxes de alto nivel. Unha tarefa tan sinxela como sumar dous números pode necesitar varias instrucións nunha linguaxe de baixo nivel como o ensamblador, pola contra nunha linguaxe de alto nivel só é necesaria unha.

Unha vez escrito un programa, tanto en linguaxes de baixo como de alto nivel, é necesario compilalos, isto é, traducilos a linguaxe máquina (un executable), que é o único que un computador entende. Isto non é así con linguaxes *interpretadas* como C#, Java ou Javascript.

## A creación do software 
Cando falamos de procesos de creación ou desenvolvemento de software estámonos a referir a un conxunto ordenado de pasos para chegar a obtención dun produto de software, que resolva un problema ou satisfaga unha necesidade.

### Complexidade dos procesos 
Os procesos de creación de software poden chegar a ser moi complexos, dependendo das súas características. Por exemplo, a creación dun sistema operativo é unha tarefa que require o deseño dun proxecto, unha xestión, numerosos recursos económicos e materiais, e todo un equipo de traballo moi disciplinado traballando durante varios anos. No outro extremo, desenvolver un programa sinxelo para resolver unha ecuación de segundo grao é unha tarefa que pode facer doadamente unha persoa soa, que nin sequera ten que ser unha programadora profesional, e con medios moi accesibles.

Normalmente, os proxectos divídense en tres categorías segundo o tamaño do software (as liñas de código) ou o custo: de pequeno, medio e gran tamaño. Existen varios métodos para determinar o volume dun proxecto; unha das máis populares é o sistema COCOMO, ou Modelo Construtivo de Custos (MOCOCU), que realiza unha relación de horas por individuo, o custo económico e a cantidade de liñas de código necesarias, que dependen da linguaxe de programación que se empregue.

Nos proxectos de desenvolvemento de grande tamaño cómpre realizar moitas tarefas e moi complexas, tanto técnicas como de xestión, e fan falta análises diversas e todo o apoio da enxeñaría especializada, a enxeñaría de software. Nos proxectos de tamaño mediano e pequeno, estes traballos poden realizalos equipos de menor tamaño, ás veces mesmo só compostos por unha persoa que sexa analista-programadora. Pero, en calquera caso, sexa de forma intuitiva ou planificada, hai que seguir certas etapas necesarias de construción do software. Estas etapas varían en número e orde dependendo da metodoloxía de desenvolvemento de software que se decida empregar.

### Metodoloxías de creación de software 
Os procesos de desenvolvemento de software posúen regras preestablecidas: o non seguimento dunha metodoloxía concreta fai que aumenten as posibilidades de que o proxecto non se conclúa ou remate sen cumprir os obxectivos previstos e con variedade de erros inaceptables (fracasan, en poucas palabras).

Do total de grandes proxectos de software iniciados, un 28% fracasan, un 46% vense sometidos a modificacións moi importantes que atrasan o remate do proxecto, e un 26% desenvólvense de maneira adecuada. Cando un proxecto fracasa, poucas veces é debido a erros técnicos; a principal causa de erros e fracasos é a carencia dunha boa metodoloxía ou dun desenvolvemento axeitado. Desde os anos noventa as metodoloxías de desenvolvemento cobraron unha maior importancia nos proxectos. Normalmente, a área de especialización no estudo e desenvolvemento destas metodoloxías é a enxeñaría de software.

Entre outras, existen metodoloxías lineais, como o desenvolvemento en fervenza, en uve, ou en dentes de serra, onde unha fase comeza cando remata a anterior e onde non se regresa ao principio, ou modelos iterativos como os modelos en espiral ou a maior parte dos procesos áxiles, como scrum, a programación extrema, o lean, o Proceso Unificado Racional (RUP), e o desenvolvemento por aspectos (FDD). É habitual que para o desenvolvemento de software de tamaño medio os equipos humanos que  participan apliquen as súas propias metodoloxías, que normalmente son un híbrido dos procesos anteriores e que ás veces se modifican para axeitarse a proxectos concretos con criterios propios.[miniatura|Modelo de [desenvolvemento en fervenza para a creación dun software.]]
O proceso de desenvolvemento pode involucrar distintas persoas con diferentes papeis, desde o ámbito administrativo, pasando polo técnico e a xestión ou a comercialización. Pero de forma moi xeral podemos enumerar unha serie de etapas, que se poden resumir en:
* Especificación e análise de requisitos (captura e obtención de información)
* Deseño
* Programación
* Testaxe (testaxes unitarias e de integración)
* Instalación e produción
* Mantemento

Estas etapas poden mudar lixeiramente de nome, ser máis globais, ou máis concretas; agrupárense ou escindírense en etapas máis específicas.

### Linguaxes e paradigmas 
Hai moitas linguaxes de programación, como son o C, PHP, Perl, Python, Java, BASIC etc. que se poden utilizar para escribir programas. As ferramentas mínimas que se necesitan son un editor de texto e un compilador ou intérprete da linguaxe que se utilice.

Pódese crear software seguindo diferentes paradigmas, por exemplo a programación estruturada ou a programación orientada a obxectos

## Dereitos de autor 
Frecuentemente clasifícase o software segundo as liberdades que ofrece (libre ou propietario) ou se é de pago ou non (software de proba (*shareware*), *abandonware*, *freeware*...).

### Software libre 
[miniatura|[Firefox, un dos programas máis coñecidos de software libre.]]
O software libre (en inglés *free software*) é o software que pode ser utilizado, estudado e modificado sen restricións, e que pode ser copiado e redistribuído ben nunha versión modificada ou sen modificar sen ningunha restrición, ou ben cunhas restricións mínimas para garantir que os futuros destinatarios tamén terán estes dereitos.

En xeral, pódese dicir que un programa é libre se permite catro liberdades definidas pola Free Software Foundation:
* A liberdade de executar o software para calquera propósito (liberdade 0).
* A liberdade de ver como funciona o programa e adaptalo ás propias necesidades (liberdade 1). Isto implica o acceso ao código fonte como requisito.
* A liberdade de redistribuír copias (liberdade 2)
* A liberdade de mellorar o programa e de distribuílo de novo coas melloras realizadas, para que toda a comunidade se poida beneficiar (liberdade 3). Igual que no caso da liberdade 1, o acceso ao código fonte é un requisito imprescindible.

Como que este tipo de software pode redistribuírse libremente, en xeral pódese atopar gratuitamente en Internet, ou cun custo baixo se o adquirimos por medio doutros apoios (Cd-rom ou DVD por exemplo). Debido a iso, os modelos de negocio baseados en software libre normalmente baséanse a proporcionar servizos de valor engadido por exemplo apoio técnico, cursos de formación, personalización, integración, ou certificación.

### Software propietario 
O software propietario ou *non libre* é calquera software sometido a restricións na súa utilización, modificación privada, ou con restricións na copia e publicación de versións modificadas ou non modificadas. Normalmente o seu código fonte non está dispoñible, ou só baixo restricións. As restricións derivadas dos dereitos de autor, patentes, propiedade intelectual etc.,  do propietario aplícanse por medios legais pero ás veces tamén técnicos. Aínda que o código fonte poida facerse público, o software pode continuar sendo de propiedade se se manteñen as restricións antes mencionadas.

### Software gratuíto 
O software gratuíto ("freeware" en inglés) é un software que se distribúe sen ningún custo. Ás veces inclúese o código fonte, pero non é un requisito necesario. O software gratuíto adoita incluír unha licenza de uso, que permite que se redistribúa, pero con algunhas restricións como a prohibición de modificar a aplicación ou vendela, ou que só pode usarse para uso persoal, non comercial, académico etc. É habitual a utilización deste tipo de software para dar a coñecer un produto e poder conseguir usuarios dispostos a pagar por unha versión máis completa ou avanzada.

### Software de proba 
O software de proba ou *shareware* é un tipo de software que ten permiso de redistribución, pero que advirte a todo o mundo que o uso continuado da copia recibida implica o pago dunha licenza de uso.

### Software descatalogado 
O software descatalogado (*abandonware*) é un software que xa non se desenvolve nin se mantén polo titular dos seus dereitos (copyright). Habitualmente trátase de xogos ou programas sen funcións avanzadas que teñen máis de 5 anos de antigüidade e que poden ser descargados e utilizados.

## Industria do software 
[miniatura|Software de navegación con GPS para móbiles co sistema operativo [Android.]]
A industria do software está constituída por unha gran variedade de empresas de software e programadores. O software pode ser unha industria moi rendible, Bill Gates, o fundador de Microsoft, foi a persoa máis rica do mundo en 2009 en gran parte grazas ás vendas de Microsoft Windows e Microsoft Office, dous produtos de software. O mesmo pasa con Larry Ellison, que obtén en gran parte as súas ganancias a través do seu software de base de datos denominado Oracle Database.

Ao longo do tempo a industria do software foise especializando cada vez máis e hai varios tipos de negocios. Atopamos campos como o do software de sistemas e infraestrutura, que inclúe os sistemas operativos, software intermediario (*middleware*) e bases de datos, e créano empresas como Microsoft, IBM, Sybase, EMC, Oracle ou VMware. O software empresarial que automatiza os procesos empresariais nas finanzas, a produción, a loxística, as vendas e a mercadotecnia fano empresas como Oracle Corporation, SAP AG, Sage ou Infor. O software de seguridade está feito por empresas como Symantec, Comodo, Trend Micro ou Kaspersky.

Varios fabricantes de software específico para a industria tamén se atopan entre as maiores compañías de software do mundo: SunGard fai software para bancos, BlackBoar fai software para as escolas, e empresas como Qualcomm ou Cybervision fan software para empresas de telecomunicacións. Outras empresas realizan contratos de programación para desenvolver un software único e a medida para unha empresa en particular, ou céntranse na configuración e personalización dos paquetes de grandes fabricantes como SAP ou Oracle.

Tamén hai organizacións sen ánimo de lucro que se dedican á creación de software, neste grupo inclúense a Free Software Foundation, GNU (GNU/Linux) ou a Fundación Mozilla (creadora do navegador Firefox entre outros populares produtos). Xunto a estas hai outras organizacións dedicadas á estandarización do software como a W3C ou a IETF que desenvolven e promoven estándares de software de forma que a maior parte do software poida interaccionar a través de estándares por exemplo XML, HTML, HTTP ou FTP.

## Notas 
## Véxase tamén 
### Bibliografía 
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* 
*
*
*
*
*
*
*
*

### Outros artigos 
* Algoritmo
* Aplicación (informática)
* Código aberto
* Compilador
* Freeware
* Linguaxe de programación
* Shareware
* Software libre