Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Alvarito050506 en 9 Diciembre 2018, 01:16 am



Título: ¡Creemos un sistema operativo!
Publicado por: Alvarito050506 en 9 Diciembre 2018, 01:16 am
Buenos días, soy nuevo en el foro pero vengo leyendo temas acá desde hace 2 años (más o menos).
Tengo una idea de un proyecto que, por lo que leí, otros ya tuvieron y fracasaron: mi idea es crear un sistema operativo simple (nótese que utilizo esta palabra como sinónimo de "limitado" :rolleyes:).

¿A qué me refiero con "sistema operativo"?
Bueno, me refiero a:
  • Un kernel
  • Un shell con comandos built-in
  • Una API
  • Una biblioteca estándar

El orden en el que están los items es el orden de importancia que yo le doy a cada uno.

¿Puedo aclarar/especificar un poco más acerca de mi idea?
Sí, sí puedo: Mi idea es programar un microkernel que:
  • Esté programado principalmente en ANSI C (algunas partes del código requerirán ensamblador)
  • Cumpla con la especificación multiboot para poder cargarlo desde GRUB
  • Tenga un controlador VGA simple para modo texto
  • Cuente con una shell con comandos buil-in
  • Pueda cargar binarios en formato plano
  • Cuente con una API
  • Cuente con una biblioteca estándar

¿Qué nombre le pondremos al sistema?
Preguntas como esta (y relacionadas) son las que causaron que otros proyectos no hayan llegado a nada.

¿Vamos a usar Git, SVN o algo parecido?
Sí, al menos es lo que planeo hacer yo. Yo estoy bastante familiarizado con Git y GitHub así que, si el proyecto atrae interesados, crearé un repositorio en GitHub (es accesible desde la web) con un nombre aleatorio que puede que sea el definitivo o no (probablemente no).

¿Para que arquitectura desarrollaremos?
Personalmente yo prefiero empezar con la arquitectura x86 (del 80386 para arriba), ya que es la que la mayoría de las computadoras actuales posee y el código compilado para x86 puede ser ejecutado en x86_64, la otra arquitectura "popular" (en realidad la más popular es armhf, pero estamos hablando de computadoras, no de sistemas embebidos ni celulares :().

¿Y el bootloader?
La idea principal del proyecto no es crear un bootloader, pero si alguno desea desarrollar uno ¡adelante!.

¿Qué pasará con los estándares?
Por ahí en el foro hay gente muy preocupada con el tema, así que acá va una respuesta corta y concisa: Siempre que sea posible deberíamos cumplir con los estándares POSIX (lo que no significa que el proyecto se convierta en una distribución GNU/Linux).


Y bueno, hasta acá con mi propuesta, espero atraer desarrolladores, interesados o futuros usuarios. Cualquier aporte u opinión será bien recibido/a.

P.D.: Pronto empezaré a publicar código que tengo por ahí guardado sobre el tema.

Enlaces de interés:
https://wiki.osdev.org/ (https://wiki.osdev.org/)
http://www.osdever.net/ (http://www.osdever.net/)
https://github.com/aarroyoc/next-divel (https://github.com/aarroyoc/next-divel)
http://www.jamesmolloy.co.uk/ (http://www.jamesmolloy.co.uk/)
http://www.brokenthorn.com/Resources/ (http://www.brokenthorn.com/Resources/)
https://www.tutorialspoint.com/operating_system/ (https://www.tutorialspoint.com/operating_system/)


Título: Re: ¡Creemos un sistema operativo!
Publicado por: branon32 en 9 Diciembre 2018, 15:36 pm
Tiene buena pinta y me gustaría participar pero no se programar a bajo nivel :(
Si me recomiendan alguna página o algo para entender el lenguaje ensamblador y eso les beso la cara  :-* :rolleyes:


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Alvarito050506 en 9 Diciembre 2018, 16:50 pm
Hola @branon32, al final del primer post hay una serie de enlaces interesantes, pero son específicos de desarrollo de sistemas operativos. Acá abajo te dejo unos links sobre programación en bajo nivel general.

Apuntes de la Facultad de Ingeniería de la UBA (Universidad de Buenos Aires) sobre la programación en C a bajo nivel: http://web.fi.uba.ar/~bortega/apunte_c_a_bajo_nivel.pdf (http://web.fi.uba.ar/~bortega/apunte_c_a_bajo_nivel.pdf).

Página oficial de NASM (Netwide Assembler), un ensamblador con sintaxis Intel (más parecida a la del inglés): https://www.nasm.us/ (https://www.nasm.us/).

La documentación de GAS (GNU Assembler), un ensamblador con sintaxis AT&T (más díficil y parecida a la del español), que es con el que yo estoy más familiarizado y pienso usar para el proyecto: https://sourceware.org/binutils/docs-2.31/as/index.html (https://sourceware.org/binutils/docs-2.31/as/index.html).

Y, como no puede faltar, los links de Wikipedia en español e inglés sobre los dos últimos ensambladores:
GAS, Español: https://es.wikipedia.org/wiki/GNU_Assembler (https://es.wikipedia.org/wiki/GNU_Assembler)
NASM, Español: https://es.wikipedia.org/wiki/Netwide_Assembler (https://es.wikipedia.org/wiki/Netwide_Assembler)

GAS, Inglés: https://en.wikipedia.org/wiki/GNU_Assembler (https://en.wikipedia.org/wiki/GNU_Assembler)
NASM, Inglés: https://en.wikipedia.org/wiki/Netwide_Assembler (https://en.wikipedia.org/wiki/Netwide_Assembler)


Título: Re: ¡Creemos un sistema operativo!
Publicado por: manwan en 9 Diciembre 2018, 16:51 pm
Yo de mis años de niñato siempre pensé en hacer un videojuego  :P Me llevas mucha ventaja a comparación de mis ideales pasados los cuales aún no le pude dedicar el tiempo que me gustaría implementar.

Creo que el factor primordial a tener en cuenta es el Opposing-Force. Mas que las dificultades del proyecto en si o las frustraciones...creeme que cada creación mayormente requiere de papeles y de varias quejas, críticas, de todo tipo de gente etc... que solo lo hacen porque les genera satisfacción

Yo te ayudaría sino fuera que podrían surgir estas dificultades que menciono. Lo digo porque lo sé por experiencia ya que esto aparece cuando las ideas tocan la luz. Pero eso no quiere decir que no lo hagas si es lo que buscás, sino que seas consciente estas limitaciones.

Saludos y suerte en eso....  ;-)




 


Título: Re: ¡Creemos un sistema operativo!
Publicado por: AlbertoBSD en 9 Diciembre 2018, 16:55 pm
Yo me apunto. Podría programar algo del kernel relacionado con el acceso a archivos.

Saludos!


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Alvarito050506 en 9 Diciembre 2018, 16:57 pm
Hola @manwan, creo que te vi en algún hilo relacionado por el tema hace un par de meses ¡¡Aunque el tema era desde hace años!!.

Sí, es verdad que al trabajar en equipo hay que tener paciencia, sobre todo con la gente que discute por el nombre, el logo, si va a ser de 32 o 64 bits, etc. Esa misma gente es la que cree que el sistema va a tener compatibilidad nativa con la API de win32 y interfaz gráfica mejor que X11 y no es así, para esas cosas existe GNU/Linux (y Wine  ;D).

En fin, gracias por tu apoyo.


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Alvarito050506 en 9 Diciembre 2018, 17:02 pm
¡Bienvenido seas @AlbertoBSD! Yo siempre me mato con el sistema de archivos. Es más, me acuerdo que hace poco diseñe un VFS que era una versión mucho más simple de FAT8 ¡y no supe como implementarlo!

Mi idea es que principalmente el kernel en sí soporte sistemas de archivos simples, como ser FAT12 o FAT16 y que quizás más adelante soporte alguno basado en indos (ext2, ext3, ext4, etc.).


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Machacador en 9 Diciembre 2018, 17:24 pm
No se puede negar que Alvarito tiene un bonito pingüinito... me anoto para bautizar ese SO cuando este listo... si me aceptan como padrino...

 :rolleyes: :o :rolleyes:

Saludos.


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Alvarito050506 en 9 Diciembre 2018, 17:34 pm
Citar
Yo, @Machacador, por el poder que me concede el foro ubicado en la URL https://foro.elhacker.net (https://foro.elhacker.net), bautizo a este nuevo y limitado sistema operativo como XYZ123  ;-)
oK...  :-\

Fuera de broma ¡bienvenido a nuestro proyecto y que viva Tux!


Título: Re: ¡Creemos un sistema operativo!
Publicado por: **Aincrad** en 9 Diciembre 2018, 18:25 pm
Primero que todo: Que buena idea!

Segundo :

El fin para este S.O. ?? va a ser algo asi como un proyecto educativo de como crear un SO??


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Alvarito050506 en 9 Diciembre 2018, 18:42 pm
¡Gracias @**Aincrad**!

Respecto a tu pregunta, yo desarrollo todos mis programas meramente por hobby, pero quizás a alguien más le sirva como referencia o quizás alguien lo use con fines educativos. Lo que sí, quiero hacerlo libre (licenciado bajo la GPL v2.0) y colaborativo (alojarlo en GitHub).


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Markks en 9 Diciembre 2018, 18:51 pm
Te he enviado un mensaje privado


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Alvarito050506 en 9 Diciembre 2018, 19:06 pm
Bueno, yendo directamente al código, tendríamos que establecer algunas convenciones de nomenclatura de variables y funciones, documentación mínima requerida, tipos de datos utilizados, etc.

Propongo que creemos los tipos uint8, sint8, uint16. sint16, uint32, sint32 y byte, los cuales han de ser declarados de la siguiente manera:
Código
  1. typedef unsigned char uint8;
  2. typedef char sint8;
  3. typedef unsigned short uint16;
  4. typedef short sint16;
  5. typedef unsigned int uint32;
  6. typedef int sint32;
  7. typedef uint8 byte;

Propongo también que utilicemos la nomenclatura de funciones estándar POSIX y que adjuntemos el prefijo "g" (ge minúscula) a las variables globales.

Ustedes dirán...


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Alvarito050506 en 9 Diciembre 2018, 19:50 pm
Ya creé un repositorio en GitHub. Está aquí: https://github.com/Alvarito050506/N2OS (https://github.com/Alvarito050506/N2OS). El repositorio se llama N2OS por "NoNameOS" ::), lo que no significa que ninguno de ellos sea el nombre definitivo.

Ahora en un rato subo un código básico que tengo por ahí. Si alguno no sabe como usar Git o GitHub me avisa y hago una explicación general directamente.

Ah, casi me olvido: hay que definir la documentación mínima requerida que debe acompañar a cada contribución. Propongo algo como esto por cada función:
Código
  1. /*
  2.  *
  3.  * name: functionName
  4.  * params: @paramIn0, @paramIn1, @paramOut0
  5.  * return: @returnValue
  6.  * description: functionDescription
  7.  *
  8.  */

También habría que acordar cuáles compiladores, ensambladores y enlazadores vamos a usar: Personalmente yo prefiero gcc del paquete gcc y as y ld del paquete binutils. Obviamente prefiero trabajar en GNU/Linux o entornos similares (Minix, FreeBSD, etc.).

Posteen ustedes sobre que les parecieron los requisitos de documentación mínima requerida (de ahora en más DMR), en que entorno están habituados a trabajar, con que paquetes o herramientas de software, con qué notación de ensamblador (yo prefiero la notación AT&T, como habrán notado) les gusta trabajar, etc.


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Alvarito050506 en 10 Diciembre 2018, 16:10 pm
Hola a todos. Ya subí al repositorio de N2OS un esbozo de kernel. Actualmente puede ser compilado con el comando make en GNU/Linux, pero no en Windows.

Si alguien desea tomarse el tiempo de escribir un Makefile para Windows ¡bienvenido sea!.

Pronto agregaré soporte para el teclado QWERTY (distribución hispanoamericana) y una shell built-in, así que ¡no se queden atrás y envíen sus pull-request :D!

Por las dudas vuelvo a dejar el link al repositorio: https://github.com/Alvarito050506/N2OS (https://github.com/Alvarito050506/N2OS)

Edición: A continuación, algunas capturas de pantalla del kernel iniciándose y corriendo en QEMU.
Así se ve N2OS en QEMU:

(https://user-images.githubusercontent.com/31870298/49755185-fa557a80-fc96-11e8-80c6-2ace9732583c.png)
(https://user-images.githubusercontent.com/31870298/49755187-faee1100-fc96-11e8-9cbf-196b5b1bbce8.png)(https://user-images.githubusercontent.com/31870298/49755189-fb86a780-fc96-11e8-88ad-16465d9360b2.png)

::) ::) ::) It's so cool.  ::) ::) ::)


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Machacador en 10 Diciembre 2018, 16:41 pm
Se nota el entusiasmo del publico en general y ya llevas 3 post seguidos... pero eso no se debe hacer, lo conveniente es que uses el botón de modificar antes de algún moderador te llame la atención...

Ah!!!... y como sigo con mi empeño de ser el padrino de la criatura, no me gusta ese nombre que tu sugeriste y yo prefiero llamar al pequeño pingüino; SBBHKK.

 :rolleyes: :o :rolleyes:

Suerte con la empresa.


Título: Re: ¡Creemos un sistema operativo!
Publicado por: branon32 en 12 Diciembre 2018, 18:01 pm
Hola @branon32, al final del primer post hay una serie de enlaces interesantes, pero son específicos de desarrollo de sistemas operativos. Acá abajo te dejo unos links sobre programación en bajo nivel general.

Apuntes de la Facultad de Ingeniería de la UBA (Universidad de Buenos Aires) sobre la programación en C a bajo nivel: http://web.fi.uba.ar/~bortega/apunte_c_a_bajo_nivel.pdf (http://web.fi.uba.ar/~bortega/apunte_c_a_bajo_nivel.pdf).

Página oficial de NASM (Netwide Assembler), un ensamblador con sintaxis Intel (más parecida a la del inglés): https://www.nasm.us/ (https://www.nasm.us/).

La documentación de GAS (GNU Assembler), un ensamblador con sintaxis AT&T (más díficil y parecida a la del español), que es con el que yo estoy más familiarizado y pienso usar para el proyecto: https://sourceware.org/binutils/docs-2.31/as/index.html (https://sourceware.org/binutils/docs-2.31/as/index.html).

Y, como no puede faltar, los links de Wikipedia en español e inglés sobre los dos últimos ensambladores:
GAS, Español: https://es.wikipedia.org/wiki/GNU_Assembler (https://es.wikipedia.org/wiki/GNU_Assembler)
NASM, Español: https://es.wikipedia.org/wiki/Netwide_Assembler (https://es.wikipedia.org/wiki/Netwide_Assembler)

GAS, Inglés: https://en.wikipedia.org/wiki/GNU_Assembler (https://en.wikipedia.org/wiki/GNU_Assembler)
NASM, Inglés: https://en.wikipedia.org/wiki/Netwide_Assembler (https://en.wikipedia.org/wiki/Netwide_Assembler)

MUCHAS GRACIAS


Título: Re: ¡Creemos un sistema operativo!
Publicado por: Alvarito050506 en 13 Diciembre 2018, 17:46 pm
@branon32: ¡De nada!
@Machacador: Gracias por la sugerencia y, no, de seguro no le pondremos "SBBHKK" a nuestro sistema operativo (tuve que buscar en internet qué significaba  :xD).