Toaruos es un sistema operativo "completo" para PC x86-64 y soporte experimental para ARMV8.
Mientras que muchas operaciones independientes, hobby y de investigación tienen como objetivo experimentar con nuevos diseños, Toaruos pretende ser un recurso educativo, proporcionando un microcosmos representativo de funcionalidad que se encuentra en los principales sistemas operativos de escritorio.
El sistema operativo incluye un kernel, gestor de arranque, enlazador de objetos compartidos dinámicos, biblioteca estándar C, su propio sistema de ventanas compuestas, un lenguaje de programación dinámico compilado por bytes, editor de código avanzado y docenas de otras utilidades y aplicaciones de ejemplo.
No hay dependencias de tiempo de ejecución externas y todo el código fuente requerido, totalizando aproximadamente 100k líneas de (principalmente) C, se incluye en este repositorio, salvo para Kuroko, que vive por separado.
Demostración de la interfaz de usuario de Toaruos y algunas aplicaciones.
He estado trabajando en Toaruos durante más de una década, y mis objetivos han cambiado a lo largo de los años.
Cuando comencé el proyecto en diciembre de 2010, mi objetivo era "aprender haciendo", estudiando sistemas similares a UNIX haciendo uno desde cero. Había contribuido a Compiz, uno de los primeros administradores de ventanas compuestas ampliamente utilizados para X11, unos años antes, y algo natural, Toaruos, ganó una GUI construida sobre conceptos similares desde el principio.
Para su lanzamiento original 1.0 en 2015, Toaruos no fue el sistema operativo "completamente desde cero" en el que se ha convertido desde entonces. Newlib proporcionó el LIBC, y la GUI se construyó en El Cairo, Libpng y FreeType. A mediados de 2018, comencé un nuevo proyecto para reemplazar estos componentes de terceros, que finalmente se completó y se fusionó para convertirse en Toaruos 1.6.
A lo largo del proyecto, Toaruos también ha atraído a bastantes desarrolladores del sistema operativo para principiantes que han tratado de usarlo como referencia. El núcleo de Toaruos, sin embargo, fue una fuente de vergüenza personal para mí, y en abril de 2021, después de una larga pausa, comencé a trabajar en una nueva. El resultado fue Misaka: un nuevo kernel habilitado para SMP de 64 bits. Misaka se fusionó en mayo y comenzó la serie 1.99 de lanzamientos beta que llevaron a Toaruos 2.0.
dlopen .Los siguientes proyectos están actualmente en progreso:
Se recomienda a los usuarios generales que esperan construir Toaruos a partir de la fuente para desembolsar el repositorio en GitHub y hacer uso de la tubería GitHub CI.
Para aquellos que buscan construir localmente en un host Linux configurado apropiadamente con Docker, hay un contenedor de compilación disponible. El repositorio de Toaruos debe usarse como un montaje de enlace AT /root/misaka y util/build-in-docker.sh se puede ejecutar dentro de este contenedor para completar el proceso de compilación:
git clone https://github.com/klange/toaruos
cd toaruos
git submodule update --init kuroko
docker pull toaruos/build-tools:1.99.x
docker run -v `pwd`:/root/misaka -w /root/misaka -e LANG=C.UTF-8 -t toaruos/build-tools:1.99.x util/build-in-docker.sh
Después de construir así, puede ejecutar los diversos objetivos de utilidad ( make run , etc.). Intente make shell para ejecutar un shell de toaruos usando un puerto serie con qemu.
El Makefile utiliza una herramienta Kuroko, auto-dep.krk , para generar muelles adicionales para las aplicaciones y bibliotecas del espacio de usuarios, resolviendo automáticamente las dependencias basadas en las directivas #include .
En un orden indeterminado, la biblioteca C, el kernel, las bibliotecas y las aplicaciones del espacio de usuario se construyen, se combinan en un archivo comprimido para su uso como ramdisk y luego se empaquetan en una imagen del sistema de archivos ISO9660.
base/usr/include , así como recursos gráficos para el decorador de compositor y ventana.El sistema de archivos raíz está configurado de la siguiente manera:
bin : aplicaciones de primera parte.cdrom : punto de montaje para el CD, si está disponible.dev : directorio de dispositivos virtuales, generado por el kernel.net : dispositivos de interfaz de red.pex : Hub de intercambio de paquetes, enumera los servicios de IPC accesibles.pts : Pty Secondarios, puntos finales para TTYS.etc : archivos de configuración, scripts de inicio.home : directorios de usuarios.lib : bibliotecas de primera partekuroko : módulos Kuroko.mod : módulos de núcleo cargables.proc : Archivos virtuales que presentan Estado del Kernel.1 , etc.: Archivos virtuales con información de estado para procesos individuales.src : Archivos de origen, consulte la sección "Diseño del proyecto" arriba.tmp : montado como un TMPFS de lectura/escritura normalmente.usr : recursos del espacio de usuariobin : aplicaciones de terceros, normalmente vacías hasta que se instalen los paquetes.include : archivos de encabezado, incluidos los potencialmente los de paquetes de terceros.lib : bibliotecas de terceros. Debe tener libgcc_s.so de forma predeterminada.share : varios recursos.bim : resaltado de sintaxis y temas para el editor de texto.cursor : ratón Sprites del cursor.fonts : archivos de fuentes TrueType. CDS en vivo envía con Deja Vu Sans.games : Dumping Ground para archivos de recursos relacionados con el juego, como Doom Wads.help : archivos de documentación para la aplicación Ayuda del navegador.icons : iconos PNG, divididos en directorios adicionales por tamaño.ttk : recursos de hoja de sprits para el decorador de ventanas y la biblioteca de widgets.wallpapers : fondos de pantalla JPEG.var : archivos de tiempo de ejecución, incluidos los caché de manifiesto del administrador de paquetes, archivos PID, algunos archivos de bloqueo, etc. La mejor experiencia de usuario final con Toaruos se tendrá en cualquiera de estas máquinas virtuales, ya que Toaruos tiene soporte para su tamaño de pantalla automático y su posicionamiento absoluto en el ratón.
Configure una nueva VM para un "otro" invitado de 64 bits, suministre al menos 1GIB de RAM, adjunte la imagen de CD, elimine o ignore los discos duros, y seleccione un Intel Gigabit Nic. También se recomiendan dos o más CPU.
Toaruos ejecutándose en VirtualBox.
Toaruos que se ejecuta en VMware Workstation Player.
De manera predeterminada, el gestor de arranque pasará un indicador al controlador del dispositivo VirtualBox para deshabilitar el soporte "sin problemas", ya que la implementación tiene una sobrecarga de rendimiento. Para habilitar el modo sin costuras, use el menú Bootloader para verificar la opción "Virtualbox sin costuras" antes de arrancar. El menú también tiene opciones para deshabilitar el tamaño automático de visualización de invitados si experimenta problemas con esta función.
La mayor parte del desarrollo de Toaruos ocurre en QEMU, ya que proporciona la mayor flexibilidad en el hardware y la mejor experiencia de depuración. Una línea de comando QEMU recomendada en un host Ubuntu 20.04 es:
qemu-system-x86_64 -enable-kvm -m 1G -device AC97 -cdrom image.iso -smp 2
Reemplace -enable-kvm con -accel hvm o -accel haxm según corresponda en las plataformas host sin KVM, o retírelo para intentarlo bajo la emulación de software TCG de QEMU.
Tenga en cuenta que las opciones de línea de comandos QEMU no son estables y estas banderas pueden producir advertencias en versiones más nuevas.
La opción -M q35 reemplazará la emulación del chipset PIIX con una más nueva, que tiene el efecto secundario de cambiar el controlador IDE para uno SATA. Esto puede resultar en tiempos de arranque más rápidos a expensas de Toaruos no poder leer su propio CD en tiempo de ejecución hasta que llegue a terminar mi controlador Ahci.
Toaruos ha sido probado con éxito en hardware real. Si el BIOS nativo o los cargadores EFI no funcionan, intente arrancar con grub. Toaruos cumple con las especificaciones "MultiBoot" y "Multiboot 2" para que se pueda cargar con los comandos multiboot o multiboot2 de la siguiente manera:
multiboot2 /path/to/misaka-kernel root=/dev/ram0 migrate vid=auto start=live-session
module2 /path/to/ramdisk.igz
set gfxpayload=keep
Toaruos que se ejecuta de forma nativa desde un palo USB en un ThinkPad T410.
Todas las partes de primera parte de Toaruos están disponibles bajo los términos de la licencia de la Universidad de Illinois / NCSA, que es una licencia permisiva de estilo BSD. A menos que se especifique lo contrario, esta es la licencia original y única para todos los archivos en este repositorio, solo porque un archivo no tiene un encabezado de derechos de autor no significa que no esté bajo esta licencia. Toaruos se pretende como una referencia educativa, y animo el uso de mi código, pero asegúrese de seguir los requisitos de la licencia. Puede redistribuir el código bajo la licencia NCSA, así como hacer modificaciones en el código y sublicenciarlo en otros términos (como la GPL, o una licencia de propiedad), pero siempre debe incluir el aviso de copyright especificado en la licencia, así como hacer el texto completo de la licencia (solo un par de párrafos de pareja) disponibles para los usuarios finales.
Si bien la mayor parte de Toaruos está escrito por completo por mí mismo, asegúrese de incluir a otros autores donde sea relevante, como con el subsistema de audio de Mike o las funciones de cadena de Dale.
Algunos componentes de Toaruos, como Kuroko o BIM tienen términos diferentes pero compatibles.
Toaruos se refleja regularmente a múltiples sitios de alojamiento GIT.
#toaruos en Libera ( irc.libera.chat )
Las aplicaciones y bibliotecas individuales se pueden construir instalando el metapackaje build-essential desde el repositorio, que extraerá gcc y binutils . Las fuentes están disponibles en el directorio /src en el CD en vivo en un diseño similar a este repositorio, y el script de utilidad auto-dep.krk también está disponible.
Para construir ramdisks, núcleos finalizados o imágenes de CD, algunos componentes no están disponibles actualmente. En particular, el script de compilación para RamDisks todavía está escrito en Python y depende de su módulo tarfile y soporte zlib . Anteriormente, con una cadena de herramientas de compilador capaz, Toaruos 1.x pudo construir su propio núcleo, espacio de usuario, bibliotecas y cargador de arranque, y convertirlos en una imagen de CD ISO que funcione a través de un script de Python que realizaba una función similar a MakeFile.
Toaruos no es actualmente capaz de construir la mayoría de sus puertos, debido a la falta de un shell Posix adecuado y la implementación. Estos son objetivos eventuales del proyecto.
No, en absoluto. No hay código de Linux en ningún lugar de Toaruos, ni fuentes de Linux se usaron como material de referencia.
Toaruos es un proyecto completamente independiente, y todo el código en este repositorio, que es la base de código completa del sistema operativo, incluido su núcleo, cargadores de arranque, bibliotecas y aplicaciones, es original, escrita por mí mismo y un puñado de contribuyentes en el transcurso de diez años. La historia de la fuente completa, volviendo a cuando Toaruos no era más que un "Hello World" de Baremetal, se puede rastrear a través de este repositorio Git.
Toaruos está completo en el sentido de que cubre toda la gama de funcionalidades para un sistema operativo: no es "solo un núcleo" o "solo un espacio de usuario".
Toaruos no está completo en el sentido de estar "hecho".
Si bien su objetivo es admitir las interfaces POSIX lo suficientemente bien como para que se porten el software, la implementación estricta del estándar no es un objetivo importante del sistema operativo, y el cumplimiento total puede incluso ser indeseable.
Toaruos es un proyecto personal, no un proyecto comunitario. Las contribuciones en forma de código deben discutirse por adelantado. Los puertos y otros trabajos fuera del repositorio, sin embargo, son una excelente manera de ayudar.
También puede ayudar contribuyendo a Kuroko, que es parte de por qué se mantiene como un repositorio separado.