Of course you wouldn’t use an existing database engine as the foundation of a new database engine. But you would use an existing database engine as the foundation of an ERP software, which is a vastly different use case even if the software does spend a lot of time dealing with data.
If I want to build an application I don’t want to reimplement everything. That’s what middleware is for. The use case of my application is most likely not to speak a certain protocol; the protocol is just the means to what I actually want to do. There’s no reason for me to roll my own implementation from scratch and keep up with current developments except if I’m unhappy with all current implementations of that protocol.
Of course one can overdo it with middleware (the JS world is rife with this) but implementing a communication protocol is one of the classic cases where it makes sense.
sorrybookbroke@sh.itjust.works 1 week ago
I’d argue this is more like “I want to build a competitor to spotify so let’s decide between using mariaDB or writing an SQL compliant database from scratch”
In your example, a database is the end goal and you can either start with a premade or make your own.
Here, a social media platform is the end goal. Activitypub is a very important part of it but it’s not the entire piece.
If we replace the parts of your analogy with the original your example would parse out to “I want to make a competitor to lemmies ActivityPub integration, so let’s start with fedify” which is not the same as the article states.
Now, should you re-impliment a protocol yourself or use a generic library is the real question. Both have their benefits. With option A you have full code ownership and can wrap your solution around your end goal without the issue of dealing with the original to get needed changes accepted. You don’t have to worry about code not written by or understood by you. With option B, you get a more robust and almost certainly more accurate implementation. Along with, for free, better integration with any service using the same library. Very useful for a federated service when talking about cross platform.
Both have many more positives and negatives of course and each person should decide on their own how to proceed.
My opinion? I think it’s usually best to own anything which could feasibly be understood by a single dev. Even if each dev doesn’t. Anything larger shouldn’t be internal in my strong opinion. Most negatives of an external library also apply at that point with enough time.