El documento habla sobre diferentes tipos de software, incluyendo software de sistema, software de aplicación, y software de programación. También describe las etapas del proceso de desarrollo de software como la captura de requisitos, el diseño, la programación y más. Finalmente, explica conceptos como licencias de software, máquinas virtuales y diferentes formatos de código durante el desarrollo de software.
1. INSTITUTO TECNOLOGICO DE LAS
AMERICAS (ITLA)
FUNDAMENTOS DEL COMPUTADOR
TAREA 3 22/09/2014
PROFESOR: AMADIS SUAREZ
POR: RAMIS COLLADO
2. INDICE
Software.
Software de sistema. (2 ejemplos desktop y 2 mobiles)
Software de Aplicación (2 ejemplos desktop y 2
mobiles)
Software de programación. (2 ejemplos desktop y 2
móviles)
Etapas del proceso de desarrollo de software
Los tipos de licencias que existen en el software.
Maquina virtual.
3. Se conoce como software1 al equipamiento lógico o soporte
lógico de un sistema informático, que comprende el conjunto de
los componentes lógicos necesarios que hacen posible la
realización de tareas específicas, en contraposición a los
componentes físicos que son llamados hardware.
Los componentes lógicos incluyen, entre muchos otros,
las aplicaciones informáticas; tales como el procesador de texto,
que permite al usuario realizar todas las tareas concernientes a
la edición de textos; el llamados Software de sistema, tal como
el sistema operativo, que básicamente permite al resto de los
programas funcionar adecuadamente, facilitando también la
interacción entre los componentes físicos y el resto de las
aplicaciones, y proporcionando una interfaz con el usuario.
4. Su objetivo es desvincular adecuadamente al usuario y al
programador de los detalles del sistema informático en particular que
se use, aislándolo especialmente del procesamiento referido a las
características internas de: memoria, discos, puertos y dispositivos de
comunicaciones, impresoras, pantallas, teclados, etc. El software de
sistema le procura al usuario y programador adecuadas interfaces de
alto nivel, controladores, herramientas y utilidades de apoyo que
permiten el mantenimiento del sistema global. Incluye entre otros:
Sistemas operativos
Controladores de dispositivos
Herramientas de diagnóstico
Herramientas de Corrección y Optimización
Servidores
Utilidades
5. Es aquel que permite a los usuarios llevar a cabo una o varias tareas
específicas, en cualquier campo de actividad susceptible de ser
automatizado o asistido, con especial énfasis en los negocios. Incluye entre
muchos otros: Aplicaciones para Control de
sistemas y automatización industrial
Aplicaciones ofimáticas
Software educativo
Software empresarial
Bases de datos
Telecomunicaciones (por ejemplo Internet y toda su estructura lógica)
Videojuegos
Software médico
Software de cálculo numérico y simbólico.
Software de diseño asistido (CAD)
Software de control numérico (CAM)
6. Es el conjunto de herramientas que permiten
al programador desarrollar programas informáticos, usando
diferentes alternativas y lenguajes de programación, de una manera
práctica. Incluyen básicamente: Editores de texto
Compiladores
Intérpretes
Enlazadores
Depuradores
Entornos de Desarrollo Integrados (IDE): Agrupan las anteriores
herramientas, usualmente en un entorno visual, de forma tal que el
programador no necesite introducir múltiples comandos para
compilar, interpretar, depurar, etc. Habitualmente cuentan con una
avanzada interfaz gráfica de usuario (GUI).
7. Captura, análisis y especificación de requisitos
Al inicio de un desarrollo (no de un proyecto), esta es la primera fase que se
realiza, y, según el modelo de proceso adoptado, puede casi terminar para
pasar a la próxima etapa (caso de Modelo Cascada Realimentado) o puede
hacerse parcialmente para luego retomarla (caso Modelo Iterativo
Incremental u otros de carácter evolutivo).
En simple palabras y básicamente, durante esta fase, se adquieren, reúnen y
especifican las características funcionales y no funcionales que deberá
cumplir el futuro programa o sistema a desarrollar.
Las bondades de las características, tanto del sistema o programa a
desarrollar, como de su entorno, parámetros no funcionales y arquitectura
dependen enormemente de lo bien lograda que esté esta etapa. Esta es,
probablemente, la de mayor importancia y una de las fases más difíciles de
lograr certeramente, pues no es automatizable, no es muy técnica y depende
en gran medida de la habilidad y experiencia del analista que la realice.
8. Siendo que la captura, elicitación y especificación de requisitos,
es una parte crucial en el proceso de desarrollo de software, ya
que de esta etapa depende el logro de los objetivos finales
previstos, se han ideado modelos y diversas metodologías de
trabajo para estos fines. También existen herramientas software
que apoyan las tareas relativas realizadas por el ingeniero en
requisitos.
Universo de Discurso (UdeD): es el contexto general en el
cual el software deberá ser desarrollado y deberá operar. El
UdeD incluye todas las fuentes de información y todas las
personas relacionadas con el software. Esas personas son
conocidas también como actores de ese universo. El UdeD es la
realidad circunstanciada por el conjunto de objetivos definidos
por quienes demandaron el software.
9. A partir de la extracción y análisis de información en su ámbito se
obtienen todas las especificaciones necesarias y tipos de requisitos
para el futuro producto software.
El objetivo de la Ingeniería de requisitos (IR) es sistematizar el
proceso de definición de requisitos permitiendo elicitar, modelar y
analizar el problema, generando un compromiso entre los ingenieros
de requisitos y los clientes/usuarios, ya que ambos participan en la
generación y definición de los requisitos del sistema. La IR aporta un
conjunto de métodos, técnicas y herramientas que asisten a los
ingenieros de requisitos (analistas) para obtener requisitos lo más
seguros, veraces, completos y oportunos posibles, permitiendo
básicamente:
Comprender el problema
Facilitar la obtención de las necesidades del cliente/usuario
Validar con el cliente/usuario
Garantizar las especificaciones de requisitos
10. Aquí muestro un esquema, más o menos riguroso, aunque no
detallado, de los pasos y tareas a seguir para realizar la captura,
análisis y especificación de requisitos software. También allí se
observa qué artefacto o documento se obtiene en cada etapa del
proceso. En el diagrama no se explicita metodología o modelo a
utilizar, sencillamente se pautan las tareas que deben cumplirse,
de alguna manera.
11. Una posible lista, general y ordenada, de tareas recomendadas para obtener la
definición de lo que se debe realizar, los productos a obtener y las técnicas a
emplear durante la actividad de elicitación de requisitos, en fase de Especificación
de Requisitos Software es:
Obtener información sobre el dominio del problema y el sistema actual (UdeD).
Preparar y realizar las reuniones para elicitación/negociación.
Identificar/revisar los objetivos del usuario.
Identificar/revisar los objetivos del sistema.
Identificar/revisar los requisitos de información.
Identificar/revisar los requisitos funcionales.
Identificar/revisar los requisitos no funcionales.
Priorizar objetivos y requisitos.
Algunos principios básicos a tener en cuenta:
Presentar y entender cabalmente el dominio de la información del problema.
Definir correctamente las funciones que debe realizar el Software.
Representar el comportamiento del software a consecuencias de acontecimientos
externos, particulares, incluso inesperados.
Reconocer requisitos incompletos, ambiguos o contradictorios.
Dividir claramente los modelos que representan la información, las funciones y
comportamiento y características no funcionales.
12. Se pueden identificar dos formas de requisitos:
Requisitos de usuario: Los requisitos de usuario son frases en lenguaje natural junto
a diagramas con los servicios que el sistema debe proporcionar, así como las
restricciones bajo las que debe operar.
Requisitos de sistema: Los requisitos de sistema determinan los servicios del
sistema y pero con las restricciones en detalle. Sirven como contrato.
Es decir, ambos son lo mismo, pero con distinto nivel de detalle.
Ejemplo de requisito de usuario: El sistema debe hacer préstamos Ejemplo de
requisito de sistema: Función préstamo: entrada código socio, código ejemplar;
salida: fecha devolución; etc.
Se clasifican en tres los tipos de requisitos de sistema:
Requisitos funcionales
Los requisitos funcionales describen:
Los servicios que proporciona el sistema (funciones).
La respuesta del sistema ante determinadas entradas.
El comportamiento del sistema en situaciones particulares.
Requisitos no funcionales
13. Los requisitos no funcionales son restricciones de los servicios o funciones que
ofrece el sistema (ej. cotas de tiempo, proceso de desarrollo, rendimiento, etc.)
Ejemplo 1. La biblioteca Central debe ser capaz de atender simultáneamente a todas
las bibliotecas de la Universidad Ejemplo 2. El tiempo de respuesta a una consulta
remota no debe ser superior a 1/2 si su vez, hay tres tipos de requisitos no
funcionales: Requisitos del producto. Especifican el comportamiento del producto
(Ej. prestaciones, memoria, tasa de fallos, etc.)
Requisitos organizativos. Se derivan de las políticas y procedimientos de las
organizaciones de los clientes y desarrolladores (Ej. estándares de proceso,
lenguajes de programación, etc.)
Requisitos externos. Se derivan de factores externos al sistema y al proceso de
desarrollo (Ej. requisitos legislativos, éticos, etc.)
Requisitos del dominio.
Los requisitos del dominio se derivan del dominio de la aplicación y reflejan
características de dicho dominio.
Pueden ser funcionales o no funcionales.
Ej. El sistema de biblioteca de la Universidad debe ser capaz de exportar datos
mediante el Lenguaje de Intercomunicación de Bibliotecas de España (LIBE). Ej. El
sistema de biblioteca no podrá acceder a bibliotecas con material censurado.
14. En ingeniería de software, el diseño es una fase de ciclo de vida del software. Se basa en la especificación
de requisitos producido por el análisis de los requisitos (fase de análisis), el diseño define cómo estos
requisitos se cumplirán, la estructura que debe darse al sistema de software para que se haga realidad.
El diseño sigue siendo una fase separada del la programación o codificación, esta última corresponde a la
traducción en un determinado lenguaje de programación de las premisas adoptadas en el diseño.
Las distinciones entre las actividades mencionadas hasta ahora no siempre son claras cómo se quisiera
en las teorías clásicas de ingeniería de software. El diseño, en particular, puede describir el
funcionamiento interno de un sistema en diferentes niveles de detalle, cada una de ellos se coloca en una
posición intermedia entre el análisis y codificación.
Normalmente se entiende por "diseño de la arquitectura" al diseño de "muy alto nivel", que sólo define la
estructura del sistema en términos de la módulos de software de que se compone y las relaciones
macroscópicas entre ellos. A este nivel de diseño pertenecen fórmulas como cliente-servidor o “tres
niveles”, o, más generalmente, las decisiones sobre el uso de la arquitectura de hardware especial que se
utilice, el sistema operativo, DBMS, Protocolos de red, etc.
Un nivel intermedio de detalle puede definir la descomposición del sistema en módulos, pero esta vez
con una referencia más o menos explícita al modo de descomposición que ofrece el particular lenguaje
de programación con el que el desarrollo se va a implementar, por ejemplo, en un diseño realizado con la
tecnología de objetos el proyecto podría describir al sistema en términos de clases y sus interrelaciones.
El diseño detallado, por último, es una descripción del sistema muy cercana a la codificación (por
ejemplo, describir no sólo las clases en abstracto, sino también sus atributos y los métodos con sus
tipos).
15. Durante esta etapa se realizan las tareas que comúnmente se
conocen como programación; que consiste, esencialmente, en
llevar a código fuente, en el lenguaje de programación elegido,
todo lo diseñado en la fase anterior. Esta tarea la realiza el
programador, siguiendo por completo los lineamientos
impuestos en el diseño y en consideración siempre a los
requisitos funcionales y no funcionales (ERS) especificados en
la primera etapa.
16. Durante la fase de programación, el código puede adoptar varios
estados, dependiendo de la forma de trabajo y del lenguaje elegido, a
saber:
Código fuente: es el escrito directamente por los programadores en
editores de texto, lo cual genera el programa. Contiene el conjunto de
instrucciones codificadas en algún lenguaje de alto nivel. Puede estar
distribuido en paquetes, procedimientos, bibliotecas fuente, etc.
Código objeto: es el código binario o intermedio resultante de
procesar con un compilador el código fuente. Consiste en
una traducción completa y de una sola vez de éste último. El código
objeto no es inteligible por el ser humano (normalmente es formato
binario) pero tampoco es directamente ejecutable por la
computadora. Se trata de una representación intermedia entre el
código fuente y el código ejecutable, a los fines de un enlace final con
las rutinas de biblioteca y entre procedimientos o bien para su uso
con un pequeño intérprete intermedio [a modo de distintos ejemplos
véase EUPHORIA, (intérprete intermedio), FORTRAN (compilador
puro) MSIL (Microsoft Intermediate Language)(intérprete)
y BASIC (intérprete puro, intérprete intermedio, compilador
intermedio o compilador puro, depende de la versión utilizada)].
17. El código objeto no existe si el programador trabaja con un lenguaje a modo
de intérprete puro, en este caso el mismo intérprete se encarga de traducir y
ejecutar línea por línea el código fuente (de acuerdo al flujo del programa), en
tiempo de ejecución. En este caso tampoco existe el o los archivos de código
ejecutable. Una desventaja de esta modalidad es que la ejecución del programa
o sistema es un poco más lenta que si se hiciera con un intérprete intermedio, y
bastante más lenta que si existe el o los archivos de código ejecutable. Es decir
no favorece el rendimiento en velocidad de ejecución. Pero una gran ventaja de
la modalidad intérprete puro, es que el esta forma de trabajo facilita
enormemente la tarea de depuración del código fuente (frente a la alternativa
de hacerlo con un compilador puro). Frecuentemente se suele usar una forma
mixta de trabajo (si el lenguaje de programación elegido lo permite), es decir
inicialmente trabajar a modo de intérprete puro, y una vez depurado el código
fuente (liberado de errores) se utiliza un compilador del mismo lenguaje para
obtener el código ejecutable completo, con lo cual se agiliza la depuración y la
velocidad de ejecución se optimiza.
Código ejecutable: Es el código binario resultado de enlazar uno o más
fragmentos de código objeto con las rutinas y bibliotecas necesarias.
Constituye uno o más archivos binarios con un formato tal que el sistema
operativo es capaz de cargarlo en la memoria RAM (eventualmente también
parte en una memoria virtual), y proceder a su ejecución directa. Por lo
anterior se dice que el código ejecutable es directamente «inteligible por la
computadora». El código ejecutable, también conocido como código
máquina, no existe si se programa con modalidad de «intérprete puro».
18. Entre las diversas pruebas que se le efectúan al software se
pueden distinguir principalmente:
Prueba unitarias: Consisten en probar o testear piezas de
software pequeñas; a nivel de secciones, procedimientos,
funciones y módulos; aquellas que tengan funcionalidades
específicas. Dichas pruebas se utilizan para asegurar el correcto
funcionamiento de secciones de código, mucho más reducidas
que el conjunto, y que tienen funciones concretas con cierto
grado de independencia.
Pruebas de integración: Se realizan una vez que las pruebas
unitarias fueron concluidas exitosamente; con éstas se intenta
asegurar que el sistema completo, incluso los subsistemas que
componen las piezas individuales grandes del software
funcionen correctamente al operar e interpelar en conjunto.
19. La instalación del software es el proceso por el cual los programas
desarrollados son transferidos apropiadamente al computador
destino, inicializados, y, eventualmente, configurados; todo ello con
el propósito de ser ya utilizados por el usuario final. Constituye la
etapa final en el desarrollo propiamente dicho del software. Luego de
ésta el producto entrará en la fase de funcionamiento y producción,
para el que fuera diseñado.
La instalación, dependiendo del sistema desarrollado, puede consistir
en una simple copia al disco rígido destino (casos raros actualmente);
o bien, más comúnmente, con una de complejidad intermedia en la
que los distintos archivos componentes del software
(ejecutables, bibliotecas, datos propios, etc.) son descomprimidos y
copiados a lugares específicos preestablecidos del disco; incluso se
crean vínculos con otros productos, además del propio sistema
operativo. Este último caso, comúnmente es un proceso bastante
automático que es creado y guiado con herramientas software
específicas (empaquetado y distribución, instaladores).
20. En productos de mayor complejidad, la segunda alternativa es la utilizada,
pero es realizada o guiada por especialistas; puede incluso requerirse la
instalación en varios y distintos computadores (instalación distribuida).
También, en software de mediana y alta complejidad normalmente es
requerido un proceso de configuración y chequeo, por el cual se asignan
adecuados parámetros de funcionamiento y se testea la operatividad
funcional del producto.
En productos de venta masiva las instalaciones completas, si son
relativamente simples, suelen ser realizadas por los propios usuarios finales
(tales como sistemas operativos, paquetes de oficina, utilitarios, etc.) con
herramientas propias de instalación guiada; incluso la configuración suele
ser automática. En productos de diseño específico o «a medida» la
instalación queda restringida, normalmente, a personas especialistas
involucradas en el desarrollo del software en cuestión.
Una vez realizada exitosamente la instalación del software, el mismo pasa a
la fase de producción (operatividad), durante la cual cumple las funciones
para las que fue desarrollado, es decir, es finalmente utilizado por el (o los)
usuario final, produciendo los resultados esperados.
21. El mantenimiento de software es el proceso de control, mejora y optimización del software
ya desarrollado e instalado, que también incluye depuración de errores y defectos que
puedan haberse filtrado de la fase de pruebas de control y beta test. Esta fase es la última
(antes de iterar, según el modelo empleado) que se aplica al ciclo de vida del desarrollo de
software. La fase de mantenimiento es la que viene después de que el software está operativo
y en producción.
Durante el período de mantenimiento, es común que surjan nuevas revisiones y versiones
del producto; que lo liberan más depurado, con mayor y mejor funcionalidad, mejor
rendimiento, etc. Varias son las facetas que pueden ser alteradas para provocar cambios
deseables, evolutivos, adaptaciones o ampliaciones y mejoras.
Básicamente se tienen los siguientes tipos de cambios:
Perfectivos: Aquellos que llevan a una mejora de la calidad interna del software en cualquier
aspecto: Reestructuración del código, definición más clara del sistema y su documentación;
optimización del rendimiento y eficiencia.
Evolutivos: Agregados, modificaciones, incluso eliminaciones, necesarias en el software para
cubrir su expansión o cambio, según las necesidades del usuario.
Adaptivos: Modificaciones que afectan a los entornos en los que el sistema opera, tales como:
Cambios de configuración del hardware (por actualización o mejora de componentes
electrónicos), cambios en el software de base, en gestores de base de datos, en
comunicaciones, etc.
Correctivos: Alteraciones necesarias para corregir errores de cualquier tipo en el producto
software desarrollado.
22. software Libre o Free Software
Es un software disponible para cualquiera que desee utilizarlo, copiarlo y distribuirlo,
ya sea en su forma original o con modificaciones. La posibilidad de modificaciones
implica que el código fuente está disponible. Si un programa es libre, puede ser
potencialmente incluido en un sistema operativo también libre. Es importante no
confundir software libre con software gratis, porque la libertad asociada al software
libre de copiar, modificar y redistribuir, no significa gratuidad. Existen programas
gratuitos que no pueden ser modificados ni redistribuidos. Y existen programas pagos.
Copyleft
La mayoría de las licencias usadas en la publicación de software libre permite que los
programas sean modificados y redistribuidos. Estas prácticas están generalmente
prohibidas por la legislación internacional de copyright, que intenta impedir que
alteraciones y copias sean efectuadas sin la autorización del o los autores. Las licencias que
acompañan al software libre hacen uso de la legislación de copyright para impedir la
utilización no autorizada, pero estas licencias definen clara y explícitamente las
condiciones bajo las cuales pueden realizarse copias, modificaciones y redistribuciones,
con el fin de garantizar las libertades de modificar y redistribuir el software registrado. A esta
versión de copyright, se le da el nombre de Copyleft.
23. GPL
La Licencia Pública General GNU (GNU General Public License GPL) es la
licencia que acompaña los paquetes distribuidos por el Proyecto GNU, más
una gran variedad de software que incluye el núcleo del sistema operativo
Linux. La formulación de GPL es tal que en vez de limitar la distribución del
software que protege, llega hasta impedir que este software sea integrado en
software propietario. La GPL se basa en la legislación internacional de copyright, lo
que debe garantizar cobertura legal para el software licenciado con GPL.
Debían
La licencia Debían es parte del contrato realizado entre Debían y la
comunidad de usuarios de software libre, y se denomina Debían Free Software
Guidelines (DFSG). En esencia, esta licencia contiene criterios para la distribución
que incluyen, además de la exigencia de publicación del código fuente: (a) la
redistribución libre ; (b) el código fuente debe ser incluido y debe poder ser
redistribuido; (c) todo trabajo derivado debe poder ser redistribuido bajo la misma
licencia del original; (d) puede haber restricciones en cuanto a la redistribución del
código fuente, si el original fue modificado; (e) la licencia no puede discriminar a
ninguna persona o grupo de personas, así como tampoco ninguna forma de
utilización del software; (f ) los derechos otorgados no dependen del sitio en el que
el software se encuentra; y (g) la licencia no puede 'contaminar' a otro software.
24. Open Source
La licencia de Open Source Initiative deriva de Debían.
BSD
La licencia BSD cubre las distribuciones de software de Berkeley Software
Distribution, además de otros programas. Ésta es una licencia
considerada 'permisiva', ya que impone pocas restricciones sobre la
forma de uso, alteraciones y redistribución del software. El software
puede ser vendido y no hay obligaciones de incluir el código fuente. Esta
licencia garantiza el crédito a los autores del software pero no intenta
garantizar que las modificaciones futuras permanezcan siendo
software libre.
X.org
El Consorcio X distribuye X Windows Sistema bajo una licencia que lo
hace software libre, aunque sin adherirse al Copyleft. Existen
distribuciones bajo la licencia de la X.org que son software libre, y otras
distribuciones que no lo son. Existen algunas versiones no-libres del
sistema de ventanas X11 para estaciones de trabajo y ciertos
dispositivos de IBM-PC que son las únicas funciones disponibles, sin
otros similares que sean distribuidos como software libre.
25. Software con Dominio Público
El Software con dominio público es software sin copyright. Algunos tipos de
copia o versiones modificadas pueden no ser libres si el autor impone restricciones
adicionales en la redistribución del original o de trabajos derivados.
Software Semi-libre
El Software semi-libre es un software que no es libre pero permite que otros
individuos lo usen, lo copien, lo distribuyan y hasta lo modifiquen. Ejemplos
de software semi-libre son las primeras versiones de Internet Explorer de Microsoft,
o algunas versiones de browsers de Netscape, y StarOffice.
Freeware
El término freeware no posee una definición ampliamente aceptada, pero es
utilizada para programas que permiten la redistribución pero no la
modificación, y que incluyen su código fuente. Estos programas no son software
libre.
Es un programa gratuito. Sin embargo, no es libre. En este tipo de licencia el
autor puede restringir su programa al uso empresarial, redistribución no
autorizada, modificación por usuarios y otro tipo de restricciones. (Ejemplos:
Internet Explorer, Adobe Flash Player, Windows Live Messenger)
26. Shareware
Shareware es el software disponible con el permiso para que sea
redistribuido, pero su utilización implica el pago. Generalmente,
el código fuente no se encuentra disponible, y por lo tanto es
imposible realizar modificaciones.
Es un programa distribuido gratuitamente, pero por tiempo
limitado o con algunos recursos restringidos. A través del pago
de un valor definido por el autor del programa, se puede obtener el
registro del programa o la versión integral con todos los recursos.
Abarca las licencias adware, trial y demo.
Software Propietario
El Software propietario es aquel cuya copia, redistribución o
modificación están, en alguna medida, prohibidos por su
propietario. Para usar, copiar o redistribuir, se debe solicitar permiso
al propietario o pagar.
27. Software Comercial
El Software comercial es el software desarrollado por una empresa con el
objetivo de lucrar con su utilización. Nótese que "comercial" y "propietario" no
son lo mismo. La mayor parte del software comercial es propietario, pero existe
software libre que es comercial, y existe software no-libre que no es comercial.
Adware
Subprograma que descarga publicidad sobre otro programa principal. Esto
ocurre cuando un programa tiene versiones comerciales o más avanzadas que
necesitan ser compradas para poder ser utilizadas. Pagando por la versión
comercial, esos anuncios desaparecen. Es una licencia muy poco usada. Un ejemplo
es el Ashampoo Burning Studio 2009.
Trial
Versión de programa pago, distribuido gratuitamente con todos los recursos
activos, pero por un tiempo determinado. Es como un programa freeware, que
después de determinado tiempo deja de funcionar. Para continuar con la utilización
del programa, se debe comprar la clave de registro e insertarla en el programa, para
que vuelva a ejecutarse. Ejemplo: Nero, Alcohol 120% y Photoshop.
28. Demo
Versión de demostración, liberada por el autor, que no contiene
todas las funciones del programa original. Es distribuida
gratuitamente, y no tiene plazo de validez, pero también tiene pocos
recursos y funciones. Ejemplo: Need for Speed DEMO, Fifa 09
DEMO.
Crippleware
Es un programa con menos recursos y funciones. Muy conocido
como "versión lite". Ideal para ser usado en computadoras viejas.
Ejemplo: BurnAware Free.
Donationware
Versión de programa en la que el autor solicita una donación,
para cubrir los gastos del desarrollo del programa. No es obligatoria,
pero si solicitada. El programa no sufre variantes por realizar o no la
donación. Ejemplo: FreeRapid Downloader, Linux Slax.
29. Abandonware
Programa cuyo desarrollo fue abandonado. El autor debe
anunciar públicamente el abandono del programa para ser
abandoware, mientras tanto el programa está protegido contra
los derechos de copia (copyright). Si la discontinuidad es
anunciada, el programa puede ser distribuido y modificado por
cualquier usuario o desarrollador.
"Queda asegurada la tutela de los derechos relacionados a
programas informáticos por el plazo de cincuenta años, a partir
del 1 de enero del año siguiente de su publicación o, en la
ausencia de esta, de su creación."
30. Licencias bastante extrañas o muy poco utilizadas
Careware
Licencia de programa que solicita la ayuda de
donaciones para fondos de caridad y organizaciones de ayuda
humanitaria.
Postcardaware (o cardaware)
Tipo de licencia en la que el autor solicita que una tarjeta o
postal se le sea enviada. El usuario es sólo invitado a hacer
eso. Muy similar al Emailware, en que los usuarios mandan e-mails
al autor del programa.
31. máquina virtual es un software que simula a una computadora y
puede ejecutar programas como si fuese una computadora real. Este
software en un principio fue definido como "un duplicado eficiente y
aislado de una máquina física". La acepción del término actualmente
incluye a máquinas virtuales que no tienen ninguna equivalencia
directa con ningún hardware real.
Una característica esencial de las máquinas virtuales es que los
procesos que ejecutan están limitados por los recursos y
abstracciones proporcionados por ellas. Estos procesos no
pueden escaparse de esta "computadora virtual".
Uno de los usos domésticos más extendidos de las máquinas virtuales
es ejecutar sistemas operativos para "probarlos". De esta forma
podemos ejecutar un sistema operativo que queramos probar
(GNU/Linux, por ejemplo) desde nuestro sistema operativo habitual
(Mac OS X por ejemplo) sin necesidad de instalarlo directamente en
nuestra computadora y sin miedo a que se desconfigure el sistema
operativo primario.