The SerenityOS project builds everything from scratch. In addition to “fun” they have made a very interesting argument about this.
Ladybird implements its own HTML parser, CSS renderer, TLS layer, JavaScript engine, WASM VM, and even its own font rendering. As if building a browser from scratch was not hard enough, why not re-use some existing libraries as some comments here suggest.
Andreas had countered that he finds it slower and more difficult to work with a typical Open Source project that uses many libraries authored independently. In SerenityOS, if you want a feature or find a bug, you just make the change wherever required and check it into Git. This is true even if you make changes to multiple sub-systems at once. You have access to everything. In a more typical project, you may have to work around bugs in layers you do not control. You may be completely blocked by missing features. The standard argument is that you can just add it yourself but, as he points out, you may have to wait months for your changes to be incorporated and they could even be rejected. You can fork stuff but having to maintain a foreign code base written for different use cases using different philosophies is no fun. If you have to maintain it, why not write it the way you want.
Anyway, he argument is that for large, complex projects, it may actually be easier to write things from scratch than to try to cobble together a basket of independent dependencies.
There is something to be said for this perspective in my view. His progress with SerenityOS seems to support the argument.
At a rate, I am hopeful they can succeed and certainly wish them luck.
Ladybird implements its own HTML parser, CSS renderer, TLS layer, JavaScript engine, WASM VM, and even its own font rendering. As if building a browser from scratch was not hard enough, why not re-use some existing libraries as some comments here suggest.
Andreas had countered that he finds it slower and more difficult to work with a typical Open Source project that uses many libraries authored independently. In SerenityOS, if you want a feature or find a bug, you just make the change wherever required and check it into Git. This is true even if you make changes to multiple sub-systems at once. You have access to everything. In a more typical project, you may have to work around bugs in layers you do not control. You may be completely blocked by missing features. The standard argument is that you can just add it yourself but, as he points out, you may have to wait months for your changes to be incorporated and they could even be rejected. You can fork stuff but having to maintain a foreign code base written for different use cases using different philosophies is no fun. If you have to maintain it, why not write it the way you want.
Anyway, he argument is that for large, complex projects, it may actually be easier to write things from scratch than to try to cobble together a basket of independent dependencies.
There is something to be said for this perspective in my view. His progress with SerenityOS seems to support the argument.
At a rate, I am hopeful they can succeed and certainly wish them luck.