Salve vorrei creare un mio sistema operativo
Lavoro complesso ma non impossibile.
ma non con siti (Tipo SUSESTUDIO)
Che ti portano completamente fuori strada. SuSEStudio e' un servizio che ti permette di creare una distribuzione di SuSE Linux personalizzata. A questo proposito ti sarebbe utile dare un'occhiata al concetto di distribuzione, perche' ti serve per capire cos'e' un sistema operativo, a quali funzioni assolve e quali componenti lo compongono.
In parole povere se un po' in alto mare, cioe' ti mancano le basi concettuali. Il linguaggio lascialo perdere, perche' veramente e' l'ultima cosa. Negli anni ho visto sistemi operativi ( o meglio kernel, anche questo termine e' bene cercarlo e comprenderne il significato ) scritti in C, C++, Java, C#, Javascript, Pascal, D, Rust e un'altra dozzina di linguaggi.
Ho provato a seguire forum, tutorial etc. provando ad imparare un po' di Assembly però quando vado a compilare con nasm mi da errore. Quindi come devo fare? Che linguaggi devo imparare?
Primo problema, ovvero i tutorial e i forum. C'e' un unico forum con wiki che ti consiglio se vuoi fare sul serio ed e' questo
http://wiki.osdev.org/Main_Page
E' in inglese, lingua che DEVI conoscere se vuoi avventurarti in quest'impresa.
Terminata la premessa, posso dirti che l'assembly c'entra ( e infatti qualsiasi kernel ha un minimo di codice scritto in assembly ), in quanto e' assolutamente necessario per il setup di base della macchina durante il bootstrap ( passaggio a modalita' protetta/estesa per esempio, IDT, GDT, ecc... ). Il grosso problema che hai allo stato attuale e' la visione astratta e di alto livello che hai dei linguaggi. Da quanto leggo mi pare di capire che ti sfugge il ruolo dei compilatori/interpreti/linker nello stack software, ovvero in cosa e come viene trasformato il codice che scrivi in Javascript, C, ecc... Capire questi passaggi e' fondamentale, perche' moltissimi linguaggi di alto livello fanno girare il tuo programma sopra un ambiente di runtime preparato ad hoc, che non avrai a disposizione durante la creazione del tuo kernel. Se per esempio volessi usare Javascript, dovresti prima creare tale ambiente e su questo far girare il tuo codice Javascript.
E questa e' la parte pratica. Poi c'e' la parte teorica, quella che si puo' studiare sui libri di Tanenbaum, Silberschatz, Stallings, ecc... Non e' strettamente necessario conoscere la parte teorica, non all'inizio almeno. Ma non conoscerla implica creare un sistema operativo mediocre, che magari diventa non portabile, non espandibile, fa girare i programmi da schifo, ha prestazioni orrende e altre amenita'.
C'e' un ulteriore elemento nell'equazione, ovvero l'architettura di CPU/computer per la quale si sta realizzando il sistema. Non puoi ovviamente pretendere di creare un sistema operativo senza conoscere a menadito tutte le intercapedini dell'architettura di riferimento ( x86 in genere ). Insomma devi studiarti un libro come questo
https://www.safaribooksonline.com/library/view/introduction-to-80x86/9780763772239/
Se vuoi puoi cominciare a dare un'occhiata al sito che ho indicato, li' troverai piu' o meno gli stessi consigli che ho scritto qui, con in piu' una serie di informazioni tecniche ed articoli utili.
Ma imho dovresti seguire questa scaletta:
1. studiarti l'architettura x86 ( non perche' e' obbligatorio, ma perche' e' quella usata in tutti i PC del mondo )
2. il punto 1 ti aiutera' a capire ( intuire almeno ) il rapporto che c'e' tra linguaggi di alto livello come il Javascript e la CPU ( la storia dell'ambiente di runtime, interprete, compilatore, ecc... )
3. studiarti questo libro sui linker
https://www.amazon.com/Linkers-Kaufmann-Software-Engineering-Programming/dp/1558604960
dopo i primi 3 punti, il funzionamento del computer e del suo software dovrebbe aver smesso di sembrare magici
4. creare programmi, possibilmente in assembly ma non solo, che fanno cose a basso livello, tipo un bootloader, un programma che stampa una stringa ma al boot ( cioe' senza avere sotto un sistema operativo e una libc ), un programma che manipola i registri di una periferica ( magari la scheda grafica )
5. dare almeno un'occhiata alla teoria, perche' altrimenti verrebbe fuori solo un mostro
6. dai un'occhiata al codice di qualche sistema operativo open
7. puoi procedere con la progettazione dell'architettura del tuo kernel
per il punto 6 ti possono essere utili questi link
https://github.com/CosmosOS/Cosmos
http://www.redox-os.org/
http://jnode.org/
http://mikeos.sourceforge.net/
il primo e il terzo sono utili in quanto realizzati in C# e Java rispettivamente e servono per capire quel concetto di cui scrivevo sopra, cioe' cosa bisogna fare per poter creare un ambiente di runtime adatto a scrivere un kernel in questi linguaggi ( suggerimento: non e' semplice come in C )
il secondo e' scritto in Rust, un linguaggio "sicuro", di nuova concezione, ma che non necessita degli ambaradan degli altri due
l'ultimo e' un sistema operativo scritto apposta per essere studiabile, cioe' il codice e' semplice, scritto bene, ben commentato, adatto proprio a chi deve imparare
ce ne sono altri in verita', per esempio Minix, ma lascio a te il compito di scoprirli qualora dovessero servirti