FerretDB: A truly open-source MongoDB alternative
github.com
github.com
How's that for off topic?!
I remember when I grew up we used to call each other mongo as a joke and not meaning anything bad about it, but then on one occasion a teacher overheard us and told us that she was sad to hear people use the word that way because she had a grandchild with Down’s syndrome. I think this was one of the first times I learned that words said to one person can be hurtful to someone else even if they were not the person you said it to. And after that I’ve tried to be more conscious about which words I use in public.
> “mongo” is a derogatory term that is equally offensive as calling someone a retard
Git and the Gimp are just as bad in English.> git, noun. British Slang. a foolish or contemptible person.
"Gimp" can be an ableist slur for someone with a walking impairment in US and Canadian English but also to someone engaging in BDSM (hence "gimp suit"). The GIMP project has also seen a fork in part due to conflicting opinions about whether the name should be changed (tho I think more people were aware of the BDSM meaning and felt uncomfortable with having sexual innuendos in professional software).
"Mongo" (in German, and presumably Dutch also, anyway) specifically is used to mock cognitive disability and is derived from the historical medical term "mongoloid" which in itself was already racist. Unlike git and GIMP it's also extremely likely none of the people involved in picking the name were aware of its unfortunate meaning since the name sounds innocuous in English.
The sexual term's etymology is the ableist slur. The gimp suit gimps you. It's the same thing.
Whereas in countries where "mongo" or some version thereof is a slur, for MongoDB it's racism -> ableism -> product name or even racism + ableism -> product name
The difference is subtle but IMO what makes it worse is that while "gimping" is a dismissive reference to disability, "mongo" is a slur directly mocking a person with a (real or alleged) disability. As I said, you wouldn't want to call your product "Ret*rdDB" either.
But I think arguing over which is worse misses the point: it's a good idea to check for foreign language implications when picking a name and you should avoid relying on juvenile puns.
https://github.com/torodb/server
I emailed the project authors a while back and they said that unfortunately it had been abandoned. A shame. I hope the FerretDB people can pull it off.
Thank you for mentioning this. Unfortunately, yes, ToroDB is no longer being developed. I still believe it's a fantastic idea, and provides significant value. But when it was being built, 5 years ago, the NoSQL (as in "abandon SQL") state of mind was too strong, and the value proposition was not well understood.
I moved to work on what's always been my passion and preference: Postgres, Postgres, Postgres. For those interested, StackGres[1] is what's now my company's focus.
Things may be different today with ToroDB. The technical foundations and ideas are still there. If there would be significant interest by entities that would like to contribute to its development, it could be considered.
I wish good luck to FerretDB. The task ahead is not easy: MongoDB protocol is very simple, but the API is terribly complex and full of nuances. Getting up and running a simple PoC is very simple. Getting from there to a production quality state with notable compatibility is very hard.
[1]: https://stackgres.io
* ToroDB Stampede[1]: MongoDB replica, converting on-the-fly documents to relational structures. Targeting OLAP, as data normalization made queries from some % faster to 2-3 orders of magnitude faster.
* ToroDB Server[2]: what DocumentDB is or FerretDB is planning to be. It was less developed than Stampede, certainly.
[1]: https://github.com/torodb/stampede/
[2]: https://github.com/torodb/server
(edit: formatting)
> “Service Source Code” means the Corresponding Source for the Program or the modified version, and the Corresponding Source for all programs that you use to make the Program or modified version available as a service, including, without limitation, management software, user interfaces, application program interfaces, automation software, monitoring software, backup software, storage software and hosting software, all such that a user could run an instance of the service using the Service Source Code you make available
For example providing SSPL software running on AWS as a service is probably/possibly license infriging because you are not able to provide source code for all the stuff you are using.
In practice probably even the most well-intentioned service provider can easily be trapped by that clause.
Personally, as an open source user, I want to be able to pay whomever I want to host a product I'm using. The SPPL seems intended to prevent this. Like it's intended to prevent cloud providers from offering it as a serivce, if it didn't do so successfully under the exact terms, they'd change the terms to do so, because that's the goal. Whereas in fact as a user, I want the freedom to pay whomever I want to host it for me, if it can effectively only be self-hosted (whatever that means!) or hosted by officially licensed vendors, that's not what I'm looking for in open source, I don't want hosting-provider lock-in.
So, while we could legalistically look at the exact terms, I'd rather just have a license that is not designed to discourage/limit/prevent one of the things I want to do with the software, which is of course why we choose open source in the first place.
If you enjoy freedom in open source and avoid lock-in, you will probably be hosting Mongo on an EC2 instance, for example. SSPL provisions don't apply to that.
If I have a web app that persists data in MongoDB and lets users query it in a complicated way[0], but doesn't provide an outright MongoDB-as-a-service implementation, it's still arguably making its functionality available. I don't trust them to enforce the edge cases fairly.
[0] For example, a custom report builder for an inventory management system, or a query builder for a CRM
Then the vultures will be happy to shake folks down to pay for the licensed version or a law suit. Merit doesn't really matter, they have a claim and fighting it will cost you. They'll just bank on you preferring to pay for the license.
They may not go after the mom and pops, but they'll hit every Fortune 1000 (and probably whether they use MongoDB or not).
It's the cloud providers that are the target of the license, specifically AWS.
Open Source is on other hand ensures you have choice of vendors
the problem with non-sspl licenses is, lets say with bsd, that you give the downstream developer the right to decide if your work is part of software which gives source to users when the concern of "Free software" is that end users MUST be given source.
when it comes to cloud providers, even if this agpl license is true, google already bans AGPL software but not aws but i'm not sure but that means they dictate to the end user with vendor lock-in and stuff.
anyways SSPL aims to accomodate even this loophole by making sure if you are a provider, you have to provide source code to ALL software you use. this means, for an end user you can't be forced into a small free software carrot but still subject to rest of closed source.
i'd say this is a win-win for end users, intermediaries and developers don't matter when it comes to freedoms of end users
In practice the original claimed aim of the license does not matter that much.
Thankfully there are other licenses similar to AGPL, like BSL.
SSPL license is more intended to stop the less sophisticated hosting providers.
In any case, I don't really like any of Amazon's homemade databases after the disaster that SimpleDB turned out to be.
A blackbox test suite that tests common query types and could be run against mongo itself (similar to pgbench, TPC-C, etc) and can optionally test for correctness/speed would go a long way towards making it easier to trust this project with workloads.
100% Compatibility is not really a focus, real application use cases is. You can read on FerretDB's CEO take on compatibility here
https://www.ferretdb.io/2021/12/07/mongodb-compatibility-wha...
How does it handle the mismatch between jsonb and bson? In particular:
* more scalar types, including blobs. One hack I could think of is using ISO 8859-1 encoding instead of UTF-8, which can act as a pseudo-blob.
* preserved field order
The order of fields is maintained by adding a special field with keys in the original order. For example, `{z: 1, a: {y:2, x:3}}` is stored as `{"a":{"x":3,"y":2,"$k":["y","x"]},"z":1,"$k":["z","a"]}`.
Additional types are stored as objects with special fields too. For example, binary values are stored as `{"$b": "<base 64 string>", "s": <subtype number>}`. The full mapping is there: https://github.com/FerretDB/FerretDB/blob/b7e8240607e043a858...
Postgres jsonb works well enough for me - but this looks like a good alternative for Mongo people.
Based on this description I'd agree that FerretDB isn't a database itself. However the conversion between the MongoDB wire protocol to SQL queries could have bugs, data resiliency could be an issue if you need to guarantee writes, No guarantees of on-going support, etc.
New db's are always welcome but to use a brand new one in production would be very.... bold.
MongoDB provides "native" document persistence for programming languages, where with PostgreSQL JSON you have to live in relational database SQL land
2. MongoDB's drivers are designed to handle documents. If you use postgres directly, you have to build that part yourself (effectively a kind of ORM, including a query builder)
AWS is not funding FerretDB either
I think MongoDB did a great job figuring out developer experience for Document Database
Having said that I think there is a lot of value in FerretDB for Cloud vendors which will be able to use this project to offer MongoDB Compatible DBaaS experience
Or to quote Kyle from the Jepsen tests, "I would not use this as a system of record".
I’m not sure what you mean by backend though? You need that regardless right?
Could you add more details on "Why someone need to choose this over other DBs"from a product PoV or even the DX pov?