Créer un OS

a marqué ce sujet comme résolu.

Bon, Aze… Pour l'instant, tout le monde a pris relativement des pincettes avec toi, alors je vais prendre sur moi de jouer le Grand Méchant Loup.

En toute sincérité, ça t'arrive d'avoir un projet un tout petit peu à la mesure de tes compétences ? Depuis deux mois que tu es inscrit ici, tu as voulu créer une régie publicitaire sans avoir la moindre idée de ce qu'est un statut légal, réécrire ZdS tout seul1 sans savoir distinguer back et front et maintenant écrire un bootloader complet en ASM en n'étant pas foutu d'installer un logiciel d'assemblage sur ton OS de prédilection.

Et là, je ne parle que de ce dont tu nous a parlé ici, parce que quand je lis ça, je me dis que tu as vraiment pété une durite. « Coucou, je n'ai encore rien fait, mais je me sens de pondre un logiciel pour créer des systèmes d'exploitation sans savoir coder… »

B*rdel de m*rde, avant de vouloir coder un truc tellement compliqué que personne ne l'a jamais fait, commence par apprendre à :

  1. utiliser des majuscules ;
  2. te servir du markdown : il faut sauter des lignes entre les paragraphes, sinon, ça fait un gros pâté tout moche !

Alors je ne vois que trois explications. Soit tu es tellement ignorant que tu ne comprends même pas ce que tu essayes de faire. Soit tu es tellement ignorant que tu surestimes tes compétences de plusieurs ordres de grandeur. Soit les deux.

Selon toi, laquelle est la bonne ?


  1. Je traduis ton message : « Salut, j'ai l'intention de créer un site qui est exactement comme le vôtre point pour point, mais ha ha ! non, ce n'est pas du plagiat, qu'allez-vous penser là ? » En plus d'être totalement fantasques, tes projets sont généralement dénués de toute originalité. 

+15 -0

+1 Dominus Carnufex

Comme , si tu sais faire du VB ou du C# tu peux t'orienter vers Cosmos, c'est un plugin Visual Studio qui traduit ton code .NET en assembleur. Alors bien sûr tu ne peux pas utiliser Windows Form pour faire ton interface mais pour un simple Console.WriteLine(); ça marche sans problèmes. Et y a pas a discuter du VB c'est plus simple que de l'ASM :-°

Attention à ne pas non plus attacher Aze au pilori. C'est pas trop le style de la maison.

@Aze : Je pense que ton problème initial, c'est que ton ambition rivalise avec ton envie d'apprendre. Tu veux connaître tout, tout de suite d'un domaine, et pour cela tu te donnes des projets ambitieux et irréalisables.

Restons sur ce sujet de programmation système à bas niveau. Apparemment tu te diriges d'emblée vers l'assembleur. Pourquoi pas, mais c'est peut-être un poil violent de démarrer par là. Je ne dis pas que l'assembleur n'est pas une bonne porte d'entrée ni que ce n'est pas intéressant de réussir à faire un petit bootloader, seulement il faut bien se rendre compte que, même si tu démarres sur le programme le plus simple possible, en progressant tu auras nécessairement besoin d'acquérir ce que j'appelle la "culture système". Seulement, si tu pars de la couche la plus basse d'un OS pour remonter de façon chronologique, m'est avis que tu vas souffrir. Mais, genre, beaucoup. À moins que tu ne te destines à travailler dans le logiciel embarqué ou dans l'électronique plus tard, je ne suis pas certain que ce soit une bonne façon d'aborder le sujet.

Ce que je te suggérais de faire quelques posts plus haut n'est pas anodin. Si tu veux comprendre comment fonctionne un système d'exploitation et pourquoi pas en programmer un (ou bien juste des composantes, genre un module du noyau) plus tard, il est beaucoup plus facile de faire le chemin inverse : commencer par avoir un bon aperçu du système en tant qu'utilisateur, à quoi sert quel composant et comment on l'utilise. Et pour ça, le meilleur moyen est d'installer un système d'exploitation à la main, brique par brique, et c'est le principe de LFS (on parle pas d'un joli installeur où il faut cocher des trucs et cliquer sur OK, mais bien un truc où tu dois mettre les mains dans le cambouis pour tout construire au fur et à mesure en étant relativement guidé), et dans une mesure un peu moindre de Gentoo (qui est faite pour être utile avant tout, mais dont l'installation n'en est pas moins formatrice pour un débutant).

Pourquoi forcément Linux ? Parce que c'est l'OS par excellence dont le moindre composant est documenté et accessible à l'utilisateur pour jouer avec, contrairement à Windows.

Déjà, avec ce genre de projet (une LFS ça prend plusieurs semaines à construire), t'auras de quoi t'occuper et tu seras obligé de voir l'OS de l'intérieur. Cela dit, il est également possible que ce soit encore un peu ambitieux pour toi…

Qu'à cela ne tienne ! Installe un Linux plus simple et apprends la programmation système en C. C'est encore un autre vecteur d'apprentissage pour comprendre comment est foutu un OS, et c'est à la fois formateur et passionnant, lié de près à la sécurité informatique (qui dit C dit buffer overflows, débogage à coups de GDB, comprendre le code assembleur généré par le compilateur, et qui dit Système dit apprendre à reconnaître et colmater des failles dans certains programmes). De là, tu pourras progresser du haut vers le bas, donc tu accumuleras des connaissances utiles (et pas seulement pour la programmation d'OS) au fur et à mesure que tu progresseras.

Rien ne t'empêchera ensuite, si ça t'amuse, de t'acheter un Raspberry Pi (un ordinateur avec un processeur ARM pour moins de 50€, sérieux, ça vaut LARGEMENT le coup), et essayer de descendre encore les niveaux d'abstraction en apprenant l'assembleur ARM et en essayant de bidouiller ton OS…

L'avantage de t'y prendre dans ce sens là, c'est que :

  • tu apprendrais à utiliser tes outils de travail au fur et à mesure puisque ça fera partie de ton apprentissage,
  • tu ne prendrais pas une énorme marche dans la tronche en termes de connaissances requises,
  • tu éviterais les périodes ingrates à bosser plusieurs semaines sans résultat, ou bien quand elles arriveront, tu aurais assez d'expérience pour garder le cap.
+11 -0

Je souhaite rebondir sur un propos de nohar, indépendamment des questions de l'OP :

La programmation d'OS est certainement le domaine de l'informatique le plus ingrat et le plus difficile, talonné de près par la compilation.

Je ne vois pas en quoi un OS est une tâche particulièrement ingrate. C'est au contraire passionnant. La partie ingrate réside dans la maintenance et la compatibilité ascendante mais ça c'est vrai pour la plupart des logiciels. De toute façon il est rare et difficile qu'un amateur ait un OS assez évolué pour espérer une maintenance qui nécessite cet aspect ingrat. Car le plus gros du travail dans ce cadre est effectivement l’écriture des pilotes (et le support des normes comme USB ou TCP/IP qui sont très lourdes).

Techniquement faire un OS très rudimentaire en mode texte est faisable en quelques semaines, après si on souhaite supporter du matériel plus complexe ça peut prendre des mois pour avoir des progrès notables. Mais si l'aspect du support matériel est intéressant (ça oblige à comprendre le fonctionnement du périphérique en question), le mieux reste la conception de l'OS à savoir offrir la meilleur abstraction possible du matériel et des opérations bas niveau aux applications. Sans compter les mécanismes internes comme les systèmes de fichiers qui peuvent receler une grande satisfaction dans leurs conceptions. Mais ça en effet ça demande beaucoup de temps pour une personne seule, il est rare d'atteindre ce stade là.

Bref, juste pour dire qu'un OS ce n'est pas si ingrat que ça, bien au contraire. Mais le développement passe par de fortes frustrations ce qui est selon moi différent.

+0 -0

Je parlais du point de vue d'un développeur débutant : programmer des semaines pour afficher du texte sur un écran (donc un résultat visuel au final très peu impressionnant), ça demande une sacrée dose de passion. C'est "ingrat" parce que le résultat ne "claque" pas autant que dans le développement web ou même quand on écrit un compilateur et qu'on arrive à compiler nos premiers codes.

Cela n'enlève rien à la noblesse du domaine. Juste que ça peut rapidement être décourageant.

+0 -0

re :)

je demandais si je mettais un résolu, pour éviter au OPs de le faire si besoin, vu que j'ai réussi à compiler et à lancer du code ;) (bien que je n'ai pas réussi à 100% ce que je veux faire).

En effet, c'est XP, en machine virtuelle sur Windows 8.1. J'ai lancé le code que j'avais compilé sur win8.1. J'ai eu un message : Ce logiciel ne peut pas s’exécuter sur cette version de Windows. J'ai donc testé sur ma machine virtuelle ayant winXP, avec réussite. J'en ai donc déduit que ça devais être compilé en 16 bits vu qu'une version 64bits (en l’occurrence mon win8.1) peut émuler du 32bits, mais pas du 16bits, alors qu'une version 32bits (en l’occurrence la machine virtuelle avec winXP) peut émuler du 16bits.

Ce n'est pas ce code que j'ai utilisé pour tester la compilation, et l’exécution en fait :p. J'ai utilisé ça, bien que je ne comprenne pas grand chose, afin de tester la compilation, et l’exécution, avant de m’intéresser au code, et d'apprendre. le code de test :

1
2
3
4
5
6
7
org 0x0100 ; Adresse de début .COM
;Ecriture de la chaîne hello dans la console
mov dx, hello
mov ah, 0x9
int 0x21
ret
hello: db 'Bonjour papi.', 10, 13, '$'

(code trouvé dans ce cours sur l'ASM : http://esauvage.developpez.com/tutoriels/asm/assembleur-intel-avec-nasm/?page=page_1#LI.3)

Mon but n'est pas l'ASM bas niveau, ce que je voulais voir, c'est qu'est-ce qu'il faut faire pour faire un truc bootable. Afficher un simple texte suffit. D'accord, c'est de l'ASM bas niveau, mais ce n'est pas du tout mon but. Ce que je veux faire, en voyant le minimum bootable, c'est juste de la curiosité.

@Dominus :

Pour la régie publicitaire : En effet, je ne connaissait absolument rien sur les statuts légaux.

Pour la soit-disant ré-écriture de Zds : Je n'ai jamais souhaité ré-écrire Zds, je sais (et savais) ce qu'est Back et Front end. (D'ailleurs, si ça peut te consoler, je travail encore sur ce projet :) )

pour le bootloader : Comme dit plus haut, je ne compte pas ré-écrire un bootloader ! Je veux juste voir la limite de ce qui boot, par pur curiosité.

pour le logiciel pour créer des systèmes d'exploitation sans savoir coder : Si tu lis les 2 commentaires, tu li/comprends que ce que je parle est un éditeur WYSIWYG, qui crée juste du code CPCDOSC+ qui est ultra simpliste, bref, cela ne réinvente pas la roue^^

hormis l'éditeur WYSIWYG pour CPCDOSC+, tout à déjà été fait ;)

Pour les majuscules, je comprend pas trop :p

Pour le markdown, je suis d'accord, une fois sur deux, j'oublie :^|

Selon moi, la bonne est :

Je suis tellement ignorant que j'ignore laquelle est la bonne ;)

(Je note juste une incohérence dans ton message : ligne 7, tu dit que personne ne l'a jamais fait. Dans l'astérixe (ça s'appel bien comme ça :o ?), tu dit mes projets dénué d'originalité. Logique la dedans :o ?)

@Bat : Je vais regarder Cosmos, merci pour le nom :)

@Nohar : Je ne souhaite pas spécialement apprendre l'ASM^. Ce que je veux voir, c'est le minimum bootable (sans vouloir m'en servir, ou bosser avec, juste voir^).

Je me suis déjà essayé au C ;), mais j'ai pas spécialement accroché en fait :p

J'en ai un de Raspberry Pi (B+) :) (Merci le père noël xDD), d'où mes très maigres connaissances au niveau linux. (J'entend par là, que grâce au Raspberry, plutôt grâce à Raspbian, j'ai acquis les très maigres connaissances que j'ai niveau linux, je n'entend pas à cause du Raspberry, mes connaissances sont très maigres ;) )

+0 -3

[HS]

Je re-abandonne.

Moi pas. J'adoooore le challenge. (mais je comprends hein, il ne s'agit pas de ça)

[/HS]

je demandais si je mettais un résolu, pour éviter au OPs de le faire si besoin

Mon cher, OP = auteur du sujet. Moi, esprit bien simplet que je suis, les petits bonhommes avec un bandeau vert en-dessous marqué "staff" dessus je les appelle soit admin soit modo soit membres du staff soit staffeux. Mais après, comme je l'ai dit, je suis un esprit simplet.

En effet, c'est XP, en machine virtuelle sur Windows 8.1. J'ai lancé le code que j'avais compilé sur win8.1. J'ai eu un message : Ce logiciel ne peut pas s’exécuter sur cette version de Windows. J'ai donc testé sur ma machine virtuelle ayant winXP, avec réussite. J'en ai donc déduit que ça devais être compilé en 16 bits vu qu'une version 64bits (en l’occurrence mon win8.1) peut émuler du 32bits, mais pas du 16bits, alors qu'une version 32bits (en l’occurrence la machine virtuelle avec winXP) peut émuler du 16bits.

+

Mon but n'est pas l'ASM bas niveau, ce que je voulais voir, c'est qu'est-ce qu'il faut faire pour faire un truc bootable. Afficher un simple texte suffit. D'accord, c'est de l'ASM bas niveau, mais ce n'est pas du tout mon but. Ce que je veux faire, en voyant le minimum bootable, c'est juste de la curiosité.

Ce que tu dis là, ça ressemble un peu à montrer un tableau avec plein de couleurs à un daltonien : il ne saisira jamais toute la dimension du truc. Là, ton "minimum bootable", tu vois juste en combien de ligne ça tient, mais t'as aucune idée de ce que ça fait, donc tu ne peux pas chopper ce qui est rééllement le minimum bootable, à savoir les instructions essentielles pour faire un truc qui marche à peu près correctement. En voulant regarder ça de loin, sans t'interresser au détails, tu perds toute la beauté de la chose, toutes ses nuances. Et c'est bien dommage.

En plus, l'objectif n'est même pas atteint puisque tu as dû utiliser un OS (windows XP dans la VM ) pour lancer ton programme, donc tu n'as pas fait un "minimum bootable". Là-dessus, ta démarche est tellement étrange que, excuse-moi, mais je me pose la question suivante : tu sais bien ce qu'est la différence entre quelque chose d'éxécutable et quelque chose de bootable ?

Aussi, pour ton avant-dernier post, je t'invite à regarder la dernière ligne de cet extrait.

pour le logiciel pour créer des systèmes d'exploitation sans savoir coder : Si tu lis les 2 commentaires, tu li/comprends que ce que je parle est un éditeur WYSIWYG, qui crée juste du code CPCDOSC+ qui est ultra simpliste, bref, cela ne réinvente pas la roue^^

+

Je note juste une incohérence dans ton message : ligne 7, tu dit que personne ne l'a jamais fait. Dans l'astérixe (ça s'appel bien comme ça :o ?), tu dit mes projets dénué d'originalité. Logique la dedans :o ?

C'est parce que c'est toi qui fait le contresens, pas lui. Je ne sais pas ce que tu entends par éditeur WYSIWYG pour OS, mais si c'est bien ce à quoi je pense, ce n'est pas simple. Certes, si le but c'est de faire un "machin à la mindstorm" où tu assembles des blocs, l'interface reste dans le faisable. Mais qui va coder les blocs ? Toi ? Alors que tu ne veux que voir un OS de loin ?

En plus,

Je me suis déjà essayé au C ;), mais j'ai pas spécialement accroché en fait

Mon cher, quand tu vas taper dans la prog' d'OS, il y a 2 langages qui font loi : l'asm et le C. D'où le fait que l'on t'ai suggéré le C.

Donc, si on résume,

  • tu n'aimes pas le C
  • tu ne t'es pas formé à l'asm
  • tu ne semble pas avoir grande connaissance de l'administration système (ce n'est pas un reproche ou une tentative de dévalorisation, c'est un constat)

Dans ces conditions, j'estime que mon devoir est de t'informer que si tu souhaites créer un OS, tes chances de réussite sont proches de -1%. C'est-à-dire que tu risques plus de reculer que d'avancer.

A part ça, tu mets les liens que tu as utilisé, et même face aux critiques tu restes calme, c'est bien. Maintenant, si tu prenais en compte le fait que l'on réprouve non pas les moyens mais la démarche (voir sans comprendre, tester sans savoir) qui est contraire au but du site (apprendre même si "ça ne sert pas à grand-chose"), et que l'on est tous en train de te dire ça d'une manière courtoise mais néanmoins présente, ce serait mieux.

Maintenant, soyons clair : non, le sujet n'est pas résolu, tu n'as toujours pas fait un programme qui se lance par le BIOS. Mais vu ta démarche actuelle, on peut se demander si ce sujet sera un jour résolu. Faire ce que tu veux faire sans apprendre l'asm, c'est un peu comme vouloir faire ZdS sans connaître Python : non seulement les connaisseurs savent que ça va foirer, mais aussi tout les développeurs un peu expérimentés savent que ça va foirer.

Et je le répète : estimer le "minimum bootable" au nombre de ligne est un non-sens. Sinon, je te crée un asm avec fin d'instructions comme le C (le traducteur ce langage vers asm prend 3s à écrire puisqu'il suffit d'insérer des nouvelles lignes - et éventuellement de l'indentation si on veut faire ça bien - au bon endroit), ce qui permet d'en mettre plusieurs sur la même ligne, du coup je mets tout l'asm sur la même ligne. Ca fait un programme illisible, mais c'est le "minimum bootable" avec le minimum de ligne.

+3 -0

Tu vois Aze, c'est précisément pour cela que tu tapes sur les nerfs d'un certain nombre d'entre nous. Nohar a pris la peine de t'écrire un long message argumenté et détaillé pour te conseiller une marche à suivre, parce qu'il est gentil, patient, et largement plus compétent que toi sur le sujet. Et en juste une ligne, tu pose un gros étron fumant et méphitique sur tout le mal qu'il s'est donné pour t'aider, en lui expliquant en substance « nan mais ton idée, elle est nulle, je veux faire comme j'ai décidé moi, fût-ce en dépit du bon sens ».

Alors arrête. Arrête de demander de l'aide et des conseils si c'est pour les balayer d'un revers de la main. Et pas la peine de jouer au plus malin en me citant telle fois où tu as suivi tel conseil : chaque fois que quelqu'un te donne un conseil de fond et pas un point de détail, tu n'en fais qu'à ta tête. C'est épuisant.

Alors je sais pas. Peut-être que tu es très intelligent pour ton âge. Peut-être que tu es l'über-geek de ton collège. Mais ici, et avec ton comportement, l'image que tu donnes, c'est celle d'un merdeux de 14 ans qui se croit plus capable que tout un groupe de gens qui ont démarré l'informatique au moins aussi jeune que toi, mais ont depuis lors acquis 10 ou 20 d'expérience. Pas la peine d'argumenter, c'est l'image que tu donnes.

Je n'ai même pas l'espoir de te faire comprendre à quel point les objectifs que tu t'assignes sont farfelus. J'ai envie de dire, tant pis pour toi, c'est toi qui t'exposes à de cruelles désillusions. Mais apprends un minimum à ne pas braquer les bonnes volontés en faisant preuve d'un incroyable manque de tact. Même si ça doit te sembler remonter à bien longtemps, on a été jeunes et fougueux, nous aussi, les vieux cons : mais pas au point d'aller clamer sur tous les toits qu'on va faire un truc grandiose avant de montrer qu'on ne s'est même pas renseigné sur le sujet.

Parce que je n'invente rien. Le sujet présent, il ne s'appelle pas « quel est le plus petit programme bootable ? », tu l'as appelé « créer un OS ». Dans le sujet de ton forum perso que j'ai mis en lien, tu ne dis pas, « je vais faire une couche WYSIWYG sur un outil existant », tu dis « ce logiciel vous permettra (pas encore commencé le dev :lol: ) de créer un OS, mais sans coder :) ».

Alors à défaut d'apprendre à modérer tes objectifs, apprends au minimum à ne pas passer pour un gros prétentieux. Tu as un projet super grandiose ? Super ! Tu le gardes pour toi. Tu ne viens pas en parler sur le forum. Tu commences par faire un truc qui marche et qui correspond à ce que tu affirmes vouloir faire. Et là, seulement, tu viens le présenter sur le forum, demander de l'aide pour l'améliorer, etc. Là, on ne se demandera plus constamment si tu es en train de nous troller ou non.

Sur ce, je me rends compte que je viens à mon tour de faire un pavé et que tu vas sans doute te torcher avec aussi, alors je vais quitter le sujet et ne plus y revenir. Et avant de partir, pour que ce sujet puisse passer en résolu et terminer aux oubliettes, voici le plus petit programme bootable sur une machine x86.

1
2
3
4
5
6
bits 16

jmp $

times 510 - ($-$$) db 0
dw 0xAA55

Ça ne fait strictement rien, mais ça boote.

+10 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte