La plupart des navigateurs Web modernes sont des bêtes géantes, et probablement assez mal conçus car ils (et le Web lui-même) ont évolué de manière plutôt aléatoire.
Vous devez commencer par rendre très explicites les objectifs de votre projet (et ce que vous espérez réaliser). Est-ce quelque chose que vous faites juste pour le plaisir ou vous attendez-vous à ce que d'autres personnes utilisent votre navigateur? Si vous vous attendez à ce que d'autres l'utilisent, quelle sera la motivation pour eux? Il n'est pas réaliste de s'attendre à ce que vous développiez un nouveau navigateur à partir de zéro que tout le monde pourra utiliser en remplacement de Chrome, Safari, Firefox, IE, Opera, etc. Tous ces projets ont une longueur d'avance de 10 à 15 ans. vous, et le temps que vous les rattrapiez, ils auront encore 10 à 15 ans d'avance sur vous. De plus, ils ont beaucoup plus de force humaine derrière eux, et donc si vous voulez que votre projet réussisse, vous aurez besoin de cette force humaine à un moment donné.
C'est la raison pour laquelle Apple et Google, de grandes entreprises avec beaucoup de ressources, ne sont pas partis de zéro. Même Microsoft n'est pas parti de zéro. L'IE original était basé sur Mosaic. Les seuls navigateurs importants encore existants qui ont été démarrés à partir de zéro sont Opera , Konqueror et Lynx, qui ont malheureusement tous une part de marché minuscule. Oublions Lynx pour le moment, car il s'agit d'un navigateur contenant uniquement du texte et probablement la seule raison pour laquelle il est toujours là, c'est parce qu'il sert ce créneau spécifique. Opera est sans doute l'un des meilleurs navigateurs jamais créés, et pourtant il n'a jamais eu une grande part de marché, alors rappelez-vous que le succès et l'innovation ne sont pas la même chose. KHTML est le moteur de Konqueror, qui n'a jamais connu un grand succès en soi, mais est la base de WebKit qu'Apple et Google utilisent. Je pense que l'on pourrait certainement affirmer que si KHTML n'avait jamais été créé, ni Safari ni Chrome n'existeraient. Il est intéressant de noter que KHTML et Opera ont été en grande partie produits par des programmeurs norvégiens travaillant dans le même bâtiment à Oslo.
Vous devez envisager de créer un navigateur Web comme la création d'un système d'exploitation, car c'est essentiellement ce qu'est un navigateur - c'est un système d'exploitation pour exécuter des applications Web. Et comme un système d'exploitation, un navigateur Web est un logiciel très complexe avec de nombreux composants. Bien sûr, les gens ont réussi à créer de nouveaux systèmes d'exploitation à partir de zéro. Je pense à Linus Torvalds. Il a fait de Linux, l'un des systèmes d'exploitation les plus réussis de tous les temps.
Bien sûr, vous êtes confronté à un défi supplémentaire, qui rend la création d'un nouveau navigateur réussi plus difficile que la construction d'un nouveau système d'exploitation réussi . Les navigateurs sont censés exécuter parfaitement tout le code hérité qui circule sur le Web. Supposons maintenant que Linus Torvalds ait été informé que son nouveau système d'exploitation n'aurait pas d'importance à moins qu'il ne soit parfaitement rétrocompatible avec UNIX ou un système d'exploitation existant. Je doute qu'il aurait dérangé, et Linux n'existerait probablement pas aujourd'hui. De manière réaliste, bien sûr, la seule raison pour laquelle Linux est devenu populaire était parce qu'il était bien conçu et que le projet GNU était capable de créer des outils pour porter d'énormes quantités de code existant sur Linux. Sans le soutien idéologique de GNU pour Linux, il n'aurait jamais eu de chance.
Donc, en supposant que vous soyez vraiment assez ambitieux (ou téméraire) pour essayer de créer un nouveau navigateur à succès, vous devriez vous concentrer sur l' architecture et le design . Il n'y a aucune raison pratique de créer un nouveau navigateur à partir de zéro, sauf si vous êtes sûr de pouvoir améliorer la conception des navigateurs existants d'une manière ou d'une autre. Cela signifie que vous devez vous familiariser suffisamment avec le code de WebKit et Gecko pour comprendre les décisions de conception qu'ils ont prises, mais vous ne devriez pas essayer de copier leur conception, sinon vous pourriez aussi bien utiliser leur code.
Mes pensées personnelles (sans avoir fait suffisamment de recherches) sont que les navigateurs d'aujourd'hui ne sont pas assez modulaires. Si je devais créer un nouveau navigateur, je trouverais un moyen de faciliter les échanges entrants et sortants (comme remplacer un moteur JavaScript par un autre), et donner à l'utilisateur beaucoup plus de contrôle qu'il n'en a actuellement avec les navigateurs existants . Les navigateurs et les concepteurs Web modernes ont presque tout pris le contrôle de l'utilisateur. Pourquoi est-ce que je ne peux pas, l'utilisateur, dire au navigateur Web comment je veux qu'il rende le contenu affiché sur ma machine? Le HTML d'origine ne donnait que des directives sur la façon de structurer le contenu, et au fil du temps, les nouvelles normes sont devenues de plus en plus dogmatiques, au point où l'utilisateur est maintenant à la merci du concepteur Web. L'attrait de Linux était qu'il redonnait le contrôle à l'utilisateur, et que '
L'autre chose que je passerais du temps à rechercher, si j'étais à votre place, ce sont les principes de conception du système d'exploitation. La conception d'un bon navigateur devrait, au moins en théorie, exiger les mêmes principes que la conception d'un bon système d'exploitation - en particulier en ce qui concerne les processus concurrents, les modèles de sécurité, etc.
Enfin, après avoir fait beaucoup de recherches, c'est ici que vous devriez commencer à coder je pense:
Réorganiser la mosaïque, mais avec vos propres idées de design. C'est aussi ce que je suggérerais si vous le faites simplement pour le plaisir ou pour votre propre bénéfice éducatif. Lisez les spécifications HTML 1.0 et HTML 2.0 d'origine, ainsi que les spécifications HTTP 1.1 et les spécifications URI actuelles, et assurez-vous que votre navigateur respecte toutes ces spécifications. Vous pouvez bien sûr télécharger un logiciel existant qui gère déjà les protocoles de transport, les conventions URI, etc., mais si vous êtes sérieux au sujet de la conception de votre propre navigateur, je pense que c'est un bon exercice de faire ces choses à partir de zéro également, donc vous obtenez une bonne idée de la façon dont toutes les pièces du puzzle s'emboîtent. À la fin de l'étape 0, vous devriez avoir un navigateur au moins comparable à ce qui était à la pointe de la technologie dans les années 90. C'est une bonne première étape. Et vous pouvez en fait télécharger la mosaïque originale àftp://ftp.ncsa.uiuc.edu/Mosaic/ et voyez comment il se compare à votre navigateur. C'est aussi un bon exercice pour voir comment les sites Web actuels s'affichent dans un ancien navigateur comme Mosaic.
Ajoutez la prise en charge du DOM à votre navigateur. Concentrez-vous d'abord sur le DOM W3C niveau 1 et niveau 2, car à peu près tous les navigateurs actuels les prennent complètement en charge. Ensuite, regardez les niveaux 3 et 4. Le DOM est extrêmement fondamental pour la programmation Web, et donc si vous voulez réellement créer un navigateur Web moderne, sa conception entière doit en tenir compte. Étant donné que vous écrivez le navigateur en C #, vous souhaiterez peut-être prendre en considération la manière dont vous pourriez tirer parti du modèle objet .NET existant à votre avantage.
Regardez les moteurs de script existants et voyez si vous pouvez les porter dans votre projet. Je vous déconseille d'écrire votre propre interpréteur JavaScript, non seulement parce que c'est un très gros projet en soi, mais parce que beaucoup de travail a déjà été consacré à l'optimisation des compilateurs JS (par exemple V8). Donc, à moins que vous ne soyez un gourou de la conception de compilateurs, votre interpréteur JS construit à la main sera probablement inférieur à ce qui existe déjà, même s'il suit parfaitement les spécifications EMCAScript. Encore une fois, je pense que le moteur de script devrait être quelque chose qui est un module complètement séparé du navigateur réel de toute façon, donc je pense qu'il serait beaucoup plus utile d'avoir un cadre qui vous permette de remplacer n'importe quel moteur de script, plutôt que de créer un moteur de script cela ne fonctionne qu'avec votre navigateur.
Consultez le code source HTML / CSS / JS des 10 à 20 meilleurs sites Web d'Amérique du Nord (Google, Facebook, YouTube, Twitter, Wikipédia, Amazon, plates-formes de blogs populaires, etc.) et concevez votre navigateur pour qu'il fonctionne bien avec ces sites . C'est un problème un peu plus facile à résoudre que de créer un navigateur qui adhère à toutes les normes existantes (ce que les navigateurs actuels ne font toujours pas parfaitement) et encore moins de créer un navigateur qui rend correctement tous les sites Web sur le Web (personne ne peut faire ça). Les gens se plaindront du fait que votre navigateur enfreint les normes et ainsi de suite, mais ce n'est pas un problème aussi grave que les gens se plaignant de ne pas pouvoir accéder à Google ou à Facebook avec votre navigateur. Je ne peux penser à aucun navigateur qui ait correctement suivi toutes les normes (ou même la plupart) lors de sa première version, alors je dis ne même pas essayer.