I am evaluating Hyperledger Fabric vs R3 Corda. Is there anyone who worked on both or switched in between them? Can you shed some light why you are using Fabric instead R3 Corda and vice-versa?
What are the pros and cons in both?
I'm the lead engineer on the Corda project, so take what I say here with a small pinch of salt. I'm obviously biased and riven with conflicts of interest but .... I'll do my best to sound neutral anyway Below I'll summarise the reasons why projects switch to Corda from other platforms.
Firstly, although this is now changing, switching from other platforms is a topic we have a great deal of experience with, because it's common for people to start with Ethereum or Fabric first and then switch to Corda afterwards. Corda started later than these projects and didn't have a big bubble or IBM's marketing might behind it to spread the word, so it's a bit less well known. We have picked up a lot of business from people who were unhappy with the other platforms.
You can read some comments from b3i and TradeIX here. b3i is a large insurance consortium and switched Fabric->Corda after about a year of development:
The comments in that article are typical. We hear about these things again and again:
- Corda's privacy model is easier to reason about and scales better. "We'd need bazillions of channels with Fabric which is impractical, but Corda doesn't need channels" comes up a lot. I think the most recent version of Fabric has added more features to try and reduce this problem but I haven't heard much about that yet.
- Java/Kotlin are better languages than Go. Whilst you can use Java with Fabric in theory, it's not really a first class citizen. Lots of companies have lots of business logic already written in Java or languages that run on the JVM (see my corda.js demo at CordaCon for what I mean here), and we've taken great pains to ensure it's easily reused in Corda. For instance in the ISDA CDM hackathon around half of all competition entrants used Corda, I guess partly because the ISDA CDM (a common domain model for derivatives trading) is Java based.
- In particular with Java the tooling is much better. Go lacks a lot of tools that Java developers take for granted. For instance, interactive debugging isn't really a common thing in Go-world.
- Fabric's data model is based on Ethereum's and inherits the same scaling issues. To model tokens you end up with a "token app" that records a balance table. Deutsche Borse did a study recently where they tried to push performance on Fabric high, and what they saw is that many transactions were failing due to races. Ethereum has the same problem. Corda uses the UTXO model in which you can only get this kind of livelock if everyone is competing over the same state not the same app but the standard design patterns the UTXO model uses means this virtually never happens.
- Fabric is sometimes, perhaps unfairly, seen as a way for IBM to sell more mainframes. Fabric doesn't actually need to run on mainframes but the commercial version ("IBM Blockchain") apparently is pushed in concert with them. Likewise for Bluemix...
- We're trying to build a global peer to peer network in which apps interoperate. The governance is going to be entirely open - we're setting up a non profit foundation in the Netherlands and there are drafts of the constitutional documents and initial policy proposals on the email@example.com mailing list. If the Fabric guys are doing the same then I haven't heard of it. We believe that apps that interact with each other will be a massive part of how blockchain technology helps business take place in future. Fabric tends to be deployed in isolated islands, it seems.
- We hear a lot that people really love our documentation. I don't know if that reflects a lack on the part of other platforms or whether we're just better than expected, but we hear this all the time. We keep the docs in the same git repository as our code and use the code review process to enforce that all code changes simultaneously update the docs, so we were able to establish a "documentation culture" early on.
Finally, in the interests of fairness, I've heard of one case of a company going Corda -> Fabric. I believe it was quite some time ago, possibly ~2 years ago, but I only heard about it recently. They thought Fabric was easier to deploy, but I never found out what the specific concerns were. We've been doing a lot of work throughout 2018 on productionization with better performance, better admin tools, better docs, the Corda Firewall program etc so I hope that they wouldn't have such concerns anymore.