NetBSD es un sistema operativo tipo Unix gratuito y de código abierto basado en la distribución de software Berkeley (BSD). Fue el primer descendiente de BSD de código abierto lanzado oficialmente después de que se bifurcara 386BSD . [4] [5] Sigue desarrollándose activamente y está disponible para muchas plataformas, incluidos servidores, computadoras de escritorio, dispositivos portátiles [5] y sistemas integrados . [6] [7]
El proyecto NetBSD se centra en la claridad del código, el diseño cuidadoso y la portabilidad entre muchas arquitecturas informáticas . Su código fuente está disponible públicamente y tiene licencias permisivas . [8] [9] [10]
NetBSD se derivó originalmente de la versión 4.3BSD-Reno de la distribución de software Berkeley del Computer Systems Research Group de la Universidad de California, Berkeley , a través de su lanzamiento del código fuente Net/2 y el proyecto 386BSD . [5] El proyecto NetBSD comenzó como resultado de la frustración dentro de la comunidad de desarrolladores de 386BSD con el ritmo y la dirección del desarrollo del sistema operativo. [11] Los cuatro fundadores del proyecto NetBSD, Chris Demetriou, Theo de Raadt , Adam Glass y Charles Hannum, sintieron que un modelo de desarrollo más abierto beneficiaría al proyecto: uno centrado en un código portable, limpio y correcto. Su objetivo era producir un sistema operativo basado en BSD unificado, multiplataforma y de calidad de producción. El nombre "NetBSD" fue elegido en función de la importancia y el crecimiento de las redes como Internet en ese momento, y la naturaleza distribuida y colaborativa de su desarrollo. [12]
El repositorio de código fuente de NetBSD se estableció el 21 de marzo de 1993 y la primera versión oficial, NetBSD 0.8, se realizó el 19 de abril de 1993. [13] Esta se derivó de 386BSD 0.1 más el kit de parches no oficial de la versión 0.2.2, con varios programas de la versión Net/2 que faltaban en 386BSD reintegrados y varias otras mejoras. [13] [14] La primera versión multiplataforma, NetBSD 1.0, se realizó en octubre de 1994 y, al actualizarse con las fuentes de 4.4BSD-Lite, estaba libre de todo el código Net/2 de 4.3BSD legalmente gravado. [15] También en 1994, por razones controvertidas, uno de los fundadores, Theo de Raadt, fue eliminado del proyecto. Más tarde fundó un nuevo proyecto, OpenBSD , a partir de una versión bifurcada de NetBSD 1.0 cerca de finales de 1995. [16] En 1998, NetBSD 1.3 introdujo la colección de paquetes pkgsrc . [17]
Hasta 2004, las versiones de NetBSD 1.x se publicaban a intervalos anuales, con versiones de parches menores entre ellas. A partir de la versión 2.0, NetBSD utiliza el control de versiones semántico y cada versión principal de NetBSD corresponde a un número de versión mayor incrementado, es decir, las versiones principales posteriores a la 2.0 son 3.0, 4.0, etc. Las versiones menores anteriores ahora se dividen en dos categorías: versiones de mantenimiento "estables" xy y versiones xyz que contienen solo correcciones críticas y de seguridad. [18]
NetBSD solía venir con twm como una interfaz gráfica preconfigurada ( administrador de ventanas ); en 2020 (versión 9.1) esto se cambió al más moderno y versátil CTWM . [19]
Como sugiere el lema del proyecto ( "Por supuesto que ejecuta NetBSD" ), NetBSD ha sido portado a una gran cantidad de arquitecturas de 32 y 64 bits . Estas van desde minicomputadoras VAX hasta PDA Pocket PC . NetBSD también ha sido portado a varias consolas de videojuegos como Sega Dreamcast [20] y Nintendo Wii . [21] A partir de 2019, NetBSD admite 59 plataformas de hardware (en 16 conjuntos de instrucciones diferentes ). El núcleo y el espacio de usuario para estas plataformas se construyen a partir de un árbol de código fuente unificado central administrado por CVS . Actualmente, a diferencia de otros núcleos como μClinux , el núcleo NetBSD requiere la presencia de una MMU en cualquier arquitectura de destino dada.
La portabilidad de NetBSD se ve facilitada por el uso de interfaces de capa de abstracción de hardware para el acceso a hardware de bajo nivel, como entrada/salida de bus o DMA . Mediante esta capa de portabilidad, los controladores de dispositivos se pueden dividir en componentes "independientes de la máquina" y "dependientes de la máquina". Esto hace que un único controlador sea fácilmente utilizable en varias plataformas al ocultar los detalles de acceso al hardware y reduce el trabajo de portarlo a un nuevo sistema. [22]
Esto permite que un controlador de dispositivo específico para una tarjeta PCI funcione sin modificaciones, ya sea en una ranura PCI en una IA-32 , Alpha , PowerPC , SPARC u otra arquitectura con un bus PCI. Además, un solo controlador para un dispositivo específico puede funcionar a través de varios buses diferentes, como ISA , PCI o PC Card .
Esta independencia de plataforma facilita el desarrollo de sistemas integrados , particularmente desde NetBSD 1.6, cuando toda la cadena de herramientas de compiladores , ensambladores , enlazadores y otras herramientas admiten completamente la compilación cruzada .
En 2005, como demostración de la portabilidad y la idoneidad de NetBSD para aplicaciones integradas, Technologic Systems, un proveedor de hardware para sistemas integrados, diseñó y demostró una tostadora de cocina impulsada por NetBSD . [23]
Wasabi Systems ofrecía puertos comerciales para plataformas integradas y los respaldaba, incluidas plataformas como AMD Geode LX800, procesadores Freescale PowerQUICC , Marvell Orion, la familia AMCC 405 de procesadores PowerPC y las series Intel XScale IOP e IXP.
El marco de compilación cruzada NetBSD (también conocido como "build.sh" [24] ) permite a un desarrollador construir un sistema NetBSD completo para una arquitectura a partir de un sistema más potente de una arquitectura diferente ( compilación cruzada ), incluso en un sistema operativo diferente (el marco es compatible con la mayoría de los sistemas compatibles con POSIX ). Varios sistemas integrados que utilizan NetBSD no han requerido desarrollo de software adicional más allá de la cadena de herramientas y el rehosting del objetivo. [25]
NetBSD incluye pkgsrc (abreviatura de "fuente del paquete"), un marco para crear y administrar paquetes de software de aplicaciones de terceros . La colección pkgsrc consta de más de 20 000 paquetes a octubre de 2019. [actualizar][ 26] La creación e instalación de paquetes como Lumina , KDE , GNOME , Apache HTTP Server o Perl se realiza mediante el uso de un sistema de makefiles . Este puede obtener automáticamente el código fuente, descomprimir, parchear, configurar, crear e instalar el paquete de modo que pueda eliminarse nuevamente más tarde. Una alternativa a la compilación desde la fuente es utilizar un paquete binario precompilado. En cualquier caso, el sistema de paquetes instalará automáticamente cualquier requisito previo o dependencia, sin necesidad de intervención manual.
pkgsrc no solo es compatible con NetBSD, sino también con otras variantes de BSD como FreeBSD y Darwin / macOS , y otros sistemas operativos similares a Unix como Linux , Solaris , IRIX y otros, así como Interix . pkgsrc fue adoptado previamente como el sistema oficial de gestión de paquetes para DragonFly BSD . [27]
NetBSD ha soportado SMP desde el lanzamiento de NetBSD 2.0 en 2004, [28] que inicialmente se implementó utilizando el enfoque de bloqueo gigante . Durante el ciclo de desarrollo del lanzamiento de NetBSD 5, se realizó un trabajo importante para mejorar el soporte de SMP; la mayoría de los subsistemas del núcleo se modificaron para utilizar el enfoque de bloqueo de grano fino . Se implementaron nuevas primitivas de sincronización y las activaciones del programador se reemplazaron con un modelo de subprocesamiento 1:1 en febrero de 2007. [29] Se implementó un programador de subprocesos M2 escalable, aunque el antiguo programador 4.4BSD sigue siendo el predeterminado pero se modificó para escalar con SMP. Se implementaron interrupciones de software enhebradas para mejorar la sincronización. El sistema de memoria virtual , el asignador de memoria y el manejo de trampas se hicieron seguros para MP. El marco del sistema de archivos, incluido el VFS y los principales sistemas de archivos, se modificaron para que sean seguros para MP. Desde abril de 2008, los únicos subsistemas que se ejecutan con un bloqueo gigante son los protocolos de red y la mayoría de los controladores de dispositivos .
NetBSD proporciona varias características en el área de seguridad. [30] El marco de autorización del núcleo [31] (o Kauth) es un subsistema que administra todas las solicitudes de autorización dentro del núcleo y se usa como política de seguridad para todo el sistema. Permite que los módulos externos se conecten al proceso de autorización. NetBSD también incorpora características de mitigación de vulnerabilidades, ASLR , [32] KASLR, mprotect() restringido y Segvguard del proyecto PaX , y extensiones del compilador GCC Stack Smashing Protection (SSP, o también conocido como ProPolice, habilitado por defecto desde NetBSD 6.0). Verified Executables (o Veriexec) es un subsistema de integridad de archivos dentro del núcleo en NetBSD. Permite al usuario establecer huellas digitales (hashes) de archivos y realizar una serie de acciones diferentes si los archivos no coinciden con sus huellas digitales. Por ejemplo, se puede permitir que Perl ejecute solo scripts que coincidan con sus huellas digitales. [33] El controlador de dispositivo criptográfico (CGD) permite utilizar discos o particiones (incluidos CD y DVD) para almacenamiento cifrado. [34]
El monitor de máquinas virtuales Xen ha sido compatible con NetBSD desde la versión 3.0. El uso de Xen requiere un entorno de arranque especial previo al núcleo que carga un núcleo especializado en Xen como "sistema operativo anfitrión" (Dom0). Se puede ejecutar en paralelo cualquier cantidad de computadoras virtualizadas "sistemas operativos invitados" (DomU), con o sin soporte específico para Xen/DomU, con los recursos de hardware adecuados.
La necesidad de un gestor de arranque de terceros, como GRUB, se eliminó con el gestor de arranque compatible con Xen de NetBSD 5. [35] NetBSD 6 como Dom0 ha sido evaluado de forma comparable a Linux, con un mejor rendimiento que Linux en algunas pruebas. [36]
A partir de NetBSD 9.0, la virtualización acelerada se proporciona a través del hipervisor nativo NVMM (NetBSD Virtual Machine Monitor). [37]
Proporciona una API de virtualización, libnvmm
, que puede ser aprovechada por emuladores como QEMU . Una propiedad única de NVMM es que el núcleo nunca accede a la memoria de la máquina virtual invitada, solo la crea. [38]
El Administrador de ejecución acelerada por hardware (HAXM) de Intel proporciona una solución alternativa para la aceleración en QEMU solo para CPU Intel, similar al KVM de Linux . [39]
NetBSD 5.0 introdujo el núcleo rump , una arquitectura para ejecutar controladores en el espacio de usuario mediante la emulación de llamadas en el espacio del núcleo. Esta arquitectura anykernel permite añadir compatibilidad con controladores NetBSD a otras arquitecturas de núcleo, desde exonúcleos hasta núcleos monolíticos . [40]
NetBSD incluye muchas características empresariales como iSCSI , un sistema de archivos con registro en diario , gestión de volúmenes lógicos y el sistema de archivos ZFS .
La interfaz bio(4) para la gestión de volúmenes RAID independiente del proveedor a través de bioctl está disponible en NetBSD desde 2007. [41]
El sistema de archivos de diario WAPBL , una extensión del sistema de archivos BSD FFS, fue aportado por Wasabi Systems en 2008. [42]
El Gestor de volúmenes lógicos de NetBSD se basa en una reimplementación de BSD de un controlador de mapeo de dispositivos y una adaptación de las herramientas del Gestor de volúmenes lógicos de Linux . Fue escrito principalmente durante el Google Summer of Code 2008. [43]
El sistema de archivos ZFS desarrollado por Sun Microsystems se importó al sistema base NetBSD en 2009.
El sistema de archivos de memoria Flash CHFS se importó a NetBSD en noviembre de 2011. CHFS es un sistema de archivos desarrollado en el Departamento de Ingeniería de Software de la Universidad de Szeged , Hungría , y es el primer sistema de archivos de código abierto específico para Flash escrito para NetBSD.
A nivel de código fuente, NetBSD es casi totalmente compatible con el estándar POSIX .1 (IEEE 1003.1-1990) y mayormente compatible con POSIX.2 (IEEE 1003.2-1992).
NetBSD proporciona compatibilidad binaria a nivel de llamada del sistema en las arquitecturas de procesador adecuadas con sus versiones anteriores, pero también con varios otros sistemas operativos derivados de UNIX y similares a UNIX, incluido Linux y otros derivados de 4.3BSD como SunOS 4. Esto permite a los usuarios de NetBSD ejecutar muchas aplicaciones que solo se distribuyen en forma binaria para otros sistemas operativos, generalmente sin una pérdida significativa de rendimiento. [44]
En NetBSD también se admiten una variedad de formatos de sistemas de archivos de disco "extranjeros" , incluidos ZFS , FAT , NTFS , Linux ext2fs , Apple HFS y OS X UFS , RISC OS FileCore/ADFS, AmigaOS Fast File System , IRIX EFS , Version 7 Unix File System y muchos más a través de PUFFS .
La creación de scripts en el espacio del núcleo con el lenguaje de programación Lua se agregó en NetBSD 7.0. [45] El lenguaje Lua (es decir, su intérprete y bibliotecas estándar) se portó inicialmente al núcleo NetBSD durante Google Summer of Code 2010 y ha experimentado varias mejoras desde entonces. Hay dos diferencias principales entre Lua del espacio de usuario y del núcleo: el Lua del núcleo no admite números de punto flotante ; como tal, solo están disponibles los números enteros de Lua. Tampoco tiene soporte completo para las bibliotecas del espacio de usuario que dependen del sistema operativo (por ejemplo, io y os ).
NetBSD ha incluido un marco de monitoreo de hardware nativo desde 1999/2000. En 2003, sirvió como inspiración detrás del marco sysctl hw.sensors de OpenBSD cuando algunos controladores NetBSD se estaban trasladando a OpenBSD. [46]
En marzo de 2019 [actualizar], NetBSD contaba con cerca de 85 controladores de dispositivos que exportaban datos a través de la API del marco envsys. Desde la revisión de 2007, la serialización de datos entre el núcleo y el espacio de usuario se realiza a través de listas de propiedades XML con la ayuda de proplib(3) de NetBSD .
El diseño limpio de NetBSD, su alto rendimiento, su escalabilidad y su compatibilidad con muchas arquitecturas han llevado a su uso en dispositivos y servidores integrados, especialmente en aplicaciones de redes. [48]
Un sistema operativo comercial en tiempo real , QNX , utiliza una pila de red basada en código NetBSD, [49] [50] y proporciona varios controladores portados desde NetBSD. [48]
Dell Force10 utiliza NetBSD como el sistema operativo subyacente que impulsa FTOS (el sistema operativo Force10), que se utiliza en enrutadores/conmutadores de alta escalabilidad. [51] Force10 también hizo una donación a la Fundación NetBSD en 2007 para ayudar a promover la investigación y la comunidad de desarrollo abierto. [52]
Wasabi Systems ofrece un producto comercial Wasabi Certified BSD basado en NetBSD con funciones y extensiones empresariales patentadas, que se centran en aplicaciones integradas, de servidor y de almacenamiento. [53]
NetBSD se utilizó en el Proyecto SAMS-II de la NASA para medir el entorno de microgravedad en la Estación Espacial Internacional , [54] [55] y para investigaciones de TCP para su uso en redes satelitales . [56] [57]
En 2004, SUNET utilizó NetBSD para establecer el récord de velocidad terrestre de Internet2 . Se eligió NetBSD "debido a la escalabilidad del código TCP". [58]
NetBSD también se utiliza en los productos AirPort Extreme y Time Capsule de Apple , [59] [60] en lugar del propio OS X de Apple (cuya mayor parte del código de usuario de nivel Unix se deriva del código FreeBSD pero parte se deriva del código NetBSD [61] [62] ).
El sistema operativo del teléfono inteligente T-Mobile Sidekick LX 2009 se basa en NetBSD. [63]
El sistema operativo Minix utiliza principalmente un entorno de usuario NetBSD, así como su infraestructura de paquetes pkgsrc desde la versión 3.2. [64]
Partes de macOS fueron tomadas originalmente de NetBSD, como algunas herramientas de línea de comandos del espacio de usuario. [65] [66] [67]
Todo el núcleo de NetBSD y la mayor parte del código fuente del espacio de usuario principal se publica bajo los términos de la Licencia BSD (variantes de dos, tres y cuatro cláusulas). Esto básicamente permite a todos usar, modificar, redistribuir o vender el código como deseen, siempre que no eliminen el aviso de copyright y el texto de la licencia (las variantes de cuatro cláusulas también incluyen términos relacionados con el material publicitario). De este modo, el desarrollo de productos basados en NetBSD es posible sin tener que hacer públicas las modificaciones del código fuente. Por el contrario, la GPL , que no se aplica a NetBSD, estipula que los cambios en el código fuente de un producto deben publicarse al destinatario del producto cuando se publiquen los productos derivados de esos cambios.
El 20 de junio de 2008, la Fundación NetBSD anunció una transición a la licencia BSD de dos cláusulas, citando preocupaciones con el apoyo de UCB a la cláusula 3 y la aplicabilidad industrial de la cláusula 4. [68]
NetBSD también incluye las herramientas de desarrollo de GNU y otros paquetes, que están cubiertos por la GPL y otras licencias de código abierto. Al igual que con otros proyectos BSD , NetBSD separa aquellos en su árbol de código fuente base para facilitar la eliminación del código que se encuentra bajo licencias más restrictivas. [69] En cuanto a los paquetes, las licencias de software instaladas se pueden controlar modificando la lista de licencias permitidas en el archivo de configuración pkgsrc ( mk.conf
).
La siguiente tabla enumera las principales versiones de NetBSD y sus características más destacadas en orden cronológico inverso. No se incluyen las versiones menores ni las versiones de parches.
El logotipo de la "bandera" de NetBSD, diseñado por Grant Bissett, se introdujo en 2004 y es una abstracción del logotipo anterior, [96] que fue diseñado por Shawn Mueller en 1994. La versión de Mueller se basó en la famosa fotografía de la Segunda Guerra Mundial Izando la bandera en Iwo Jima . [97]
La Fundación NetBSD es la entidad legal propietaria de la propiedad intelectual y las marcas comerciales asociadas con NetBSD, [98] y el 22 de enero de 2004 se convirtió en una organización sin fines de lucro exenta de impuestos 501(c)3 . Los miembros de la fundación son desarrolladores que tienen acceso a las confirmaciones de CVS. [99] La Fundación NetBSD tiene una Junta Directiva, elegida por votación de los miembros por dos años. [100]
El alojamiento del proyecto lo proporcionan principalmente la Universidad de Columbia y la Universidad Western Washington , y está encabezado por una CDN proporcionada por Fastly . Los servidores espejo del proyecto están repartidos por todo el mundo y son proporcionados por voluntarios y simpatizantes del proyecto.
El proyecto define pautas para realizar commits en su árbol de fuentes CVS . El 4 de abril de 2004 se publicó su primera versión, la 1.1. [101] Las 10 pautas de esta versión se pueden resumir de la siguiente manera: [102] [103]
En mayo de 2024, la segunda directriz se amplió para establecer que el código generado por un " modelo de lenguaje grande o tecnología similar" no debe comprometerse sin la aprobación previa por escrito del núcleo. [104] [105]
NetBSD es una bifurcación de la rama 386/BSD del sistema operativo Berkeley Software Distribution (o BSD).
NetBSD se centra en un diseño limpio y soluciones bien diseñadas.
Algunos ejemplos de sistemas operativos altamente portables son Minix, NetBSD y muchos sistemas de investigación.
Los dos sistemas operativos comparten una gran cantidad de código; por ejemplo, la mayoría de las utilidades de espacio de usuario y la biblioteca C en OS X se derivan de versiones de FreeBSD.
NetBSD separa las que se encuentran en su árbol de código fuente base, para facilitar la eliminación de código con licencias más restrictivas.
Cada director ejercerá su cargo durante dos años.