Escribir un sistema operativo en Rust
(github.com/phil-opp)- Este repositorio contiene el código fuente de la serie Writing an OS in Rust publicada en os.phil-opp.com
- Si tienes preguntas, puedes abrir un issue o conversar por Gitter
Ubicación del código
- El código de cada post está en una rama de git separada
- Puedes revisar el estado intermedio después de cada post
- El código del post más reciente se puede ver aquí
- Puedes encontrar la rama de cada post siguiendo el enlace
(source code)en la lista de posts - Las ramas se nombran con el formato
post-XX(XXes el número del post) - Ejemplo: el post VGA Text Mode es
post-03, y Hardware Interrupts espost-07 - Consulta el Readme de esa rama para ver las instrucciones de compilación
- Puedes usar git worktree para hacer checkout de una rama en un subdirectorio
git worktree add code post-10 - El comando anterior crea un subdirectorio llamado
codee incluye el código del post 10 ("Heap Allocation")
Posts
- El objetivo de este proyecto es ofrecer un tutorial paso a paso mediante posts individuales del blog
- Actualmente están disponibles los siguientes posts
Bare Bones:
- A Freestanding Rust Binary (source code)
- A Minimal Rust Kernel (source code)
- VGA Text Mode (source code)
- Testing (source code)
Interrupts:
- CPU Exceptions (source code)
- Double Faults (source code)
- Hardware Interrupts (source code)
Memory Management:
- Introduction to Paging (source code)
- Paging Implementation (source code)
- Heap Allocation (source code)
- Allocator Designs (source code)
Multitasking:
- Async/Await (source code)
Posts de la primera edición
- La versión actual del blog es la segunda edición, y la primera edición ya no recibe mantenimiento
- Los posts de la primera edición aún pueden ser útiles
- La lista de posts es la siguiente
Bare Bones:
- A Minimal x86 Kernel (source code)
- Entering Long Mode (source code)
- Set Up Rust (source code)
- Printing to Screen (source code)
Memory Management:
- Allocating Frames (source code)
- Page Tables (source code)
- Remap the Kernel (source code)
- Kernel Heap (source code)
Exceptions:
- Handling Exceptions (source code)
- Double Faults (source code)
Additional Resources:
- Cross Compile Binutils
- Cross Compile libcore
- Set Up GDB
- Handling Exceptions using Naked Functions
- Catching Exceptions (source code)
- Better Exception Messages (source code)
- Returning from Exceptions (source code)
Licencia
- Este proyecto, excepto la carpeta
blog/content, está licenciado bajo una de las siguientes opciones- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
- Para la licencia de la carpeta
blog/content, consultablog/content/README.md
Contribuciones
- Salvo que se indique explícitamente lo contrario, cualquier contribución enviada intencionalmente para su inclusión se incorporará con doble licencia como se indicó arriba, según la definición de la licencia Apache-2.0
Resumen de GN⁺
- Este proyecto ofrece un tutorial paso a paso para escribir un sistema operativo en Rust
- Cada post aborda un tema independiente y lo explica junto con ejemplos de código
- Es un recurso muy útil para quienes estén interesados en el desarrollo de sistemas operativos
- Permite aprender a desarrollar un sistema operativo aprovechando la seguridad y el rendimiento de Rust
- Un proyecto similar con funciones parecidas es
Redox OS
1 comentarios
Comentarios de Hacker News
Completé la segunda edición hace unos años y aprendí muchísimo
Empecé a trabajar en MOROS después de completar el tutorial hace 5 años
En lugar de escribir un SO en Rust, habría que crear una plataforma de datos que pueda ejecutar DML/DDL
Descubrí este material después de explorar a fondo Rust y el desarrollo de sistemas operativos
Gracias a este material empecé con Rust en 2021
Los textos de Phil sobre desarrollo de sistemas operativos siempre son una gran lectura
El equipo de Harvey OS ahora está trabajando en el proyecto R9OS
Recomiendo especialmente las publicaciones de la edición original
Acabo de volver de Rustconf, y hay como unas cinco grandes publicaciones de sistemas operativos centrados en tiempo real
Otro buen recurso es crear un sistema operativo RISC-V usando Rust