Curso de programación

Clase 12 : Software Libre y librerías

Software Libre

¿Qué es el software libre?

Es el software (programa) cuyo código fuente puede ser estudiado, modificado, y utilizado libremente con cualquier finalidad y redistribuido con cambios o mejoras sobre él.

El software libre es un software que le brinda al usuario la libertad de compartirlo, estudiarlo y modificarlo. A esto lo llamamos software libre porque el usuario es libre. Free Software Foundation

El software libre suele estar disponible gratuitamente en Internet, o a precio del coste de la distribución a través de otros medios; sin embargo no es obligatorio que sea así y, aunque conserve su carácter de libre, puede ser vendido comercialmente.

Software Libre: Un poco de historia

Entre los años 1960 y 1970, el software no se consideraba un producto. En los años 70, cuando la informática todavía no disfrutaba de su gran auge, las personas que hacían uso de ella, en ámbitos universitarios y empresariales, creaban y compartían el software sin ningún tipo de restricciones.

Con la llegada de los años 1980 la situación empezó a cambiar. Las computadoras más modernas comenzaban a utilizar sistemas operativos privativos, forzando a los usuarios a aceptar condiciones restrictivas que impedían intercambiar, compartir o realizar modificaciones a dicho software.

En caso de que algún usuario o programador encontrase algún error en la aplicación, lo único que podía hacer era darlo a conocer a la empresa desarrolladora para que esta lo solucionara, si lo consideraba procedente. Aunque el programador estuviese capacitado para solucionar el problema y lo desease hacer sin pedir nada a cambio, el contrato le impedía que modificase el software.

Software Libre: Un poco de historia p2

Richard Stallman en aquel entonces era un programador en el Laboratorio de Inteligencia Artificial del MIT en la década de 1970 y principios de la de 1980. Durante ese tiempo, notó un cambio en la cultura del software. Las empresas comenzaron a limitar la accesibilidad al código fuente y a imponer restricciones en el uso del software.

Stallman se sintió frustrado por estas restricciones, que consideraba una violación de la libertad de los usuarios de computadoras. Por ejemplo, no podía modificar el software o compartirlo con otros colegas.

Richard Stallman - Facultad de Informática UNLP 2011

Software Libre: Un poco de historia p3

En 1983, Stallman anunció públicamente su intención de iniciar un proyecto de desarrollo de software que respetara las libertades de los usuarios. Este anuncio incluyó la publicación del "Manifiesto de GNU" donde estableció sus objetivos y principios para el Proyecto GNU.

Stallman fundó el Proyecto GNU, cuyo nombre es un acrónimo de "GNU's Not Unix," con el objetivo de crear un sistema operativo completo y totalmente libre basado en Unix.

Además, creó la GPL*, una licencia de software libre que garantiza que el software basado en código fuente de GNU siga siendo libre y abierto para siempre. La GPL se convirtió en un modelo para otras licencias de código abierto. También creó el término copyleft para garantizar que se mantengan las libertades del usuario en obras derivadas.

En 1985, Stallman cofundó la FSF, una organización sin fines de lucro que promueve y defiende el software libre y las libertades de los usuarios. La FSF define a las cuatro libertades del software libre:

Libertades del software

  • 0 - Ejecutar el programa para cualquier propósito: Tienes la libertad de usar el software para cualquier propósito, ya sea personal, académico, comercial o cualquier otro, sin restricciones.
  • 1 - Estudiar cómo funciona el programa:Puedes acceder al código fuente del software, lo que te permite examinar cómo funciona internamente. Esto proporciona transparencia y la capacidad de aprender de él.
  • 2 - Distribuir copiasTienes la libertad de compartir copias del software con otras personas, ya sea regalándolas, vendiéndolas o distribuyéndolas de cualquier manera que desees.
  • 3 - Mejorar y redistribuir las versiones mejoradas:Puedes modificar el software, adaptarlo a tus necesidades y redistribuir esas versiones mejoradas. Esto fomenta la colaboración y la evolución constante del software.

Entrevista interesante a Richard Stallman

Software libre y privativo

Característica Software Libre Software privativo
Acceso al Código Fuente Código fuente abierto y accesible Código fuente cerrado y no accesible
Libertades de Usuario Cuatro libertades Restricciones en el uso, copia, modificación y distribución.
Costo Gratuito o pago A menudo requiere licencia y/o pago
Restricciones de Uso Generalmente sin restricciones. Sujeto a términos de licencia y uso.
Comunidad Fomenta la colaboración y participación de la comunidad. Desarrollo controlado por una entidad.
Actualizaciones Pueden ser desarrolladas por múltiples colaboradores. Las actualizaciones dependen de la empresa propietaria
Transparencia Generalmente es transparente y auditable La transparencia depende de la voluntad de la empresa

Licencias software libre/opensource

Licencia Descripción Ejemplos
Pública General de GNU (GPL) Protege las libertades del usuario y garantiza que las modificaciones del software también sean de código abierto. Exige que las obras derivadas se licencien bajo la GPL. Linux, GNU Core Utilities.
Licencia MIT Permite un uso muy flexible, incluyendo uso en proyectos propietarios. Solo requiere la inclusión del aviso de derechos de autor. Node.js, Ruby on Rails,
Licencia Apache Permite un uso flexible y favorece la colaboración en proyectos de código abierto. Requiere la atribución y la inclusión de avisos de cambios. Node.js, Ruby on Rails, Android
Licencia Creative Commons Ampliamente utilizada para contenido no software (como imágenes y música). Ofrece una variedad de licencias que permiten diferentes grados de flexibilidad en el uso y la atribución. Fotografías de Flickr, música en SoundCloud.

Existen muchas licencias similares a las listadas. Estas son solo algunas de las mas populares.

¿No sabés con qué licencia publicar tu software? choosealicense.com

Comparativa de licencias software libre

  • Licencias software libre Permisivas:
    • MIT: La mas permisiva. Permite cambiar el tipo de licencia
    • Apache: Patentes de software. Requiere que las derivadas se publiquen bajo misma licencia.
    • BSD: Compatibilidad con software privativo. Requiere que las derivadas se publiquen bajo misma licencia.
  • Licencias Copyleft (algo mas restrictivas)
    • GPL2: Obligación de distribuir el código fuente si se distribuye el producto
    • GPL3: Protección de patentes y prohíbe el código para proyectos que pueden infringir la privacidad del usuario
    • BSL: Bussiness Software License.
  • Licencias "weak" copyleft (débilmente restrictivas)
    • LGPL v3: Permite usarlo con otras licencias. Si se hace un cambio, los cambios deben ser publicados bajo la misma licencia.

Las licencias, por lo general, deben incluir un archivo LICENSE que contenga la licencia con la cual está publicado.

Resumen

Richard Stallman comenzó el movimiento del software libre en respuesta a la creciente restricción en el uso del software y la pérdida de las libertades de los usuarios. Su compromiso con las "Cuatro Libertades" y su trabajo en el Proyecto GNU sentaron las bases para la comunidad de software libre tal como la conocemos hoy.

El software libre se basa en la idea de que los usuarios deben tener la libertad de controlar el software que utilizan, en lugar de que el software los controle. Esto promueve la colaboración, la innovación y la transparencia, y a menudo se asocia con proyectos y comunidades de desarrollo de código abierto donde las personas trabajan juntas para crear y mejorar software de manera colectiva.

El software libre y el software privativo representan dos enfoques distintos en la industria del software, y la elección entre uno y otro a menudo depende de las necesidades y valores del usuario o la organización.

Es importante tener en cuenta que estas licencias varían en términos de restricciones y permisos. La elección de una licencia dependerá de los objetivos del proyecto, la filosofía del autor y cómo desea que otros utilicen su trabajo. Es esencial leer y comprender la licencia específica antes de utilizar cualquier software o contenido con licencia.

¿Preguntas?

Librerías

¿Qué son las librerías?

Las librerías de software, también conocidas como bibliotecas de software o bibliotecas de código, son conjuntos de código reutilizable que se crean para realizar tareas comunes o específicas en el desarrollo de software.

Estas librerías contienen funciones, clases y rutinas que pueden ser utilizadas por otros programas o aplicaciones para llevar a cabo tareas específicas sin tener que escribir todo el código desde cero.

Las librerías pueden incluir funcionalidades como procesamiento de datos, gráficos, comunicación en red, cifrado, entre otros.

Librerías Python

En Python, entre las librerías mas populares encontramos:

  • NumPy: Utilizada para realizar cálculos numéricos y operaciones con matrices y arreglos. Es fundamental en el ámbito de la ciencia de datos y la computación científica. (Licencia BSD)
  • pandas : Ideal para el análisis y manipulación de datos en formato tabular, como hojas de cálculo. Es ampliamente utilizado en la manipulación de datos y la limpieza de datos. (Licencia MIT)
  • Django y Flask: Frameworks web que simplifican el desarrollo de aplicaciones web en Python. (Licencia BSD)
  • FastAPI: Ideal para crear una API rápidamente. (Licencia MIT).
  • OpenCV: Una librería de visión por computadora que se utiliza en aplicaciones de procesamiento de imágenes y video. (Varias versiones de la licencia)
  • pygame y arcade: Motores de juegos que facilita el desarrollo de juegos en 2D. Son una opción popular para desarrolladores de videojuegos independientes. (Licencia MIT)

Módulos, paquetes y librerías

MódulosUn módulo en Python es un archivo individual que contiene código Python. Puede incluir funciones, clases y variables que pueden ser reutilizadas en otros programas. Los módulos se utilizan para organizar y dividir el código en componentes más pequeños y manejables.

Paquete Un paquete es una forma de organizar múltiples módulos relacionados en un directorio. Los paquetes contienen un archivo especial llamado __init__.py, que indica que el directorio es un paquete. Los paquetes permiten estructurar y jerarquizar el código de manera lógica y organizada.

LibreríaUna librería (o biblioteca) en Python es un conjunto de módulos, paquetes y funciones que proporcionan funcionalidades específicas o herramientas útiles para realizar tareas comunes. Las librerías se utilizan para extender las capacidades de Python y facilitar la reutilización de código.

Los módulos son los componentes más pequeños y básicos en Python, los paquetes son grupos de módulos relacionados organizados en directorios, y las librerías son colecciones más grandes que pueden incluir múltiples módulos y paquetes relacionados.

Importar módulos, paquetes y/o librerías

Hemos visto que es posible extender nuestro programa importando código externo. Este código externo suele ser un módulo, paquete o librería.


                        # Importamos las funciones de random
                        import random

                        # Importamos Faker
                        from faker import Faker
					

Algunos paquetes o librerías pueden requerir instalarlo antes de usarlo. Eso lo veremos en un lab en las próximas clases.

Ejemplo: Faker

Faker es un paquete de Python que genera datos falsos. Ya sea que necesitemos iniciar una base de datos con datos, realizar pruebas de estrés o anonimizar datos tomados de un servicio, entre otras cosas. Faker nos puede generar ese tipo de información. Fue publicado con licencia MIT.

En 2022, los alumnos del curso de programación del Centro de Formación Profesional 410 a modo de trabajo final, colaboraron junto con su instructor en el proyecto de Software Libre Faker. La colaboración se basó en estudiar el código y agregar el código necesario para que sea posible generar datos falsos de Argentina.


Changelog donde se registra el cambio

Como probar Faker

Primero se debe instalar Faker


                        pip install faker
					

Luego podemos probar este código


                        from faker import Faker
                        fake = Faker('es_AR')

                        for _ in range(5):
                            print(f"Nombre: {fake.name()}")
                            print(f"Domicilio: {fake.address()}")
                            print(f"Patente: {fake.license_plate()}\n")
					

Faker

El código puede producir datos como los siguientes:


                        Nombre: Alma Ponce
                        Domicilio: Avenida Santa Rosa N° 33
                            Santa Rosa 6300, La Pampa
                        Matrícula: AO008HR

                        Nombre: Benjamin Figueroa
                        Domicilio: Av. Pte. Perón N° 550
                            Rawson 9103, Chubut
                        Patente: ESX308

                        Nombre: Emma Quiroga
                        Domicilio: Calle 187 Bis N° 42 Dto. 2
                            San Salvador de Jujuy 4600, Jujuy
                        Matrícula: AD545PZ

                    

Conclusiones

  • Se pueden utilizar, paquetes, módulos y librerías para extender nuestro programa.
  • Hay miles de paquetes y librerías de código abierto (Software Libre) para usar, estudiar y colaborar
  • Podemos licenciar nuestro software con licencias
  • Aunque tengamos poco conocimiento de programación, se puede colaborar en algún proyecto y así aprender a programar.

¿Preguntas?