Version Control on the Blockchain
Here is a joke I find hilarious: "Wouldn't it be great if somebody put version control on the blockchain? They would make a fortune!"
Let's bleed out the humour from this statement by unpacking it. "The blockchain" is a trendy concept in tech right now. A "block" is a place where you put information. The problem with blocks is that they are digital, and could be forged. So you take blocks of information and "chain" them together by using information from the last verified block in the chain to verify the next one. (Everybody assumes the first block in the chain is verified.) Then if anybody tries to modify the contents of any block once it has been verified, the chain of verifications will fail, and we will know that the chain has been tampered with.
The blockchain got super-trendy because of an alternative currency called "Bitcoin", which was supposed to be a decentralized digital currency. The blocks in the blockchain stored transactions that were made in Bitcoin. No central authority would be creating these blocks or regulating them. Instead, people competed to submit the next block in the chain. The winner of the contest wins a Bitcoin. Thus there is a financial incentive for submitting (called "mining") verified blocks, and since blocks get rarer as time goes on, mining a block got more and more valuable. Bitcoins became super-valuable, so that a Bitcoin you might have mined (or purchased) a few years ago dollars became worth tens of thousands of dollars.
The "blockchain" in this case served as a distributed ledger of transactions that anybody could verify. People saw how rich miners were getting, and so they did two things: (a) they made a bunch of coins of their own, in the hopes of cashing out, and (b) they found other applications for putting information into blockchains. Supposedly, blockchains are as revolutionary as the Internet, and anybody who dares to argue otherwise (or worse, commits the thoughtcrime of thinking that this is a speculative bubble) is obviously some bitter plebe who did not get Bitcoins when they were cheap.
So now there are all kinds of ridiculous Blockchain applications. One popular one is Etherium, which is an attempt to encode "smart contracts" written in computer code on the Blockchain. But people are trying to use blockchains to fund journalism, revolutionize healthcare, etc. etc. etc. It is a thoughtcrime to suggest that some of these applications are ridiculous.
As a result, it has become a running joke to propose putting application X "on the blockchain" and make a pile of money off of it. That is the first part of the joke.
The second part of the joke is the idea of putting "version control" on the blockchain. "Version control" is a term used in computer programming, but it has broad application whenever somebody is creating digital assets (for example: blueprints, essays, or multimedia files). When I put something (say this blog post) under version control, the version control system "remembers" the changes that were made to the document. This is nice because it creates a historical record of what changes I made when, and allows me to annotate those changes so that I have some idea of why I made them. The other important aspect of version control is merging: if both you and I were working on different aspects of this blog post, we could work on those aspects independently of each other, and then the version control system would provide a way for us to merge those changes together sensibly. If our changes are sufficiently unrelated then merging is easy. If there are overlaps then merging gets harder, but modern version control systems provide ways to alert us of these conflicts and allow us to resolve them.
The idea of version control is pretty useful, and it is found in many places. Even backups are a limited version of version control, and there are more fully-featured versions in things like Microsoft Word. So maybe it is not surprising that somebody would propose putting version control on the blockchain. (A quick search on the Internet reveals that people seriously propose this).
The punchline of the joke is that for most people (at least most people in the programming world) version control is already on the blockchain. The most popular version control system these days is called "git", and it rose to prominence years before anybody had heard of Bitcoin or "the blockchain". git works by having records of changed files (called "commits" in git terminology) and chaining them together to form a history. Every commit is verified by looking at the contents of the changes and the verification code from the previous commit.
The point of the joke is that git might be the most useful and widespread blockchain application around, but that nobody associates it with "the blockchain" because nobody is making a fortune off of it. Isn't that hilarious?
Now that I have explained the joke it clearly is not funny any more (as if it was funny in the first place), but it is still interesting to me. In my opinion git really is very similar in structure to "the blockchain", but unlike other products in the Blockchain Bubble it is actually useful and widely adopted. Nobody actually uses Bitcoin as a currency, because its value fluctuates too much. Some people are trying to put smart contracts on blockchains, but it does not seem to me as if the use cases are that compelling. What explains the difference?
Many of the people in the Blockchain world are trying to cash out in the same way Bitcoin miners did: by associating some kind of financial incentive for finding and verifying blocks. There are no such incentives in git: making a block is cheap and easy, and anybody can do it.
The reason blockchains need to have elaborate contests to figure out the next verified block is because blockchains are supposed to be chains -- they should never be allowed to branch off, because a branch means there are two competing versions of reality. In the Bitcoin world this is a disaster -- somebody could spend the same Bitcoin on both sides of a branch, for example.
git has no such restrictions. In fact, you are encouraged to make branches. One of the defining features of git is that branches are cheap and easy to make. Another defining feature is that you can copy somebody else's version control respository (called "cloning" or "forking" it it) and you will get all the commits that were ever made in that version of the repository.
Related to the above, in the blockchain you are trying to use an automated mechanism for figuring out the "true" verified blockchain. The model in git is social. For most projects in git there is one copy of the repository that people treat as canonical. Changes that are made to that repository are considered to be "official". Anybody can fork the repository and make changes. People often do this precisely to test out new changes, which they then merge back into the official repository.
Sometimes people in the git world get into fights, and then there is a "hostile fork": some party forks the repository and claims that this fork is going to be the new "official" version. If the hostile fork gains traction socially, it may live on as a new project (and the other fork might die or be a competitor). If the fork does not have social traction, then the hostile fork attempt fails.
Because the blockchain goes through elaborate mechanisms for determining the "true" verified blockchain, finding blocks is expensive. Bitcoin and many other blockchains use a concept called "proof of work" to mine blocks, which costs lots of computation (and ends up costing an enormous amount of electricity -- the energy consumption of Bitcoin is horrendous). An alternative to proof of work is called "proof of stake", which ends up meaning that the richest people on the blockchain have the best chance of getting richer.
As mentioned above, finding "blocks" in git is cheap and easy. The barrier to using git is relatively low compared to using a blockchain.
Blockchains make grand promises of conducting businesses without governments, and creating economic systems that work when nobody trusts each other. That (plus the financial incentives) means that people attracted to blockchain technologies tend not to trust each other, and the whole system is modeled on people being the worst kind of self-interested maximizers. Then some people discover flaws in the blockchain technology, and exploit those flaws to make enormous sums of money at the expense of everybody else. This happens ALL THE TIME.
Development on git works poorly when nobody trusts each other (that is how you get hostile forks). Instead, it incentivizes people to behave in trustworthy manners, because people who are jerks do not get their commits merged into the "official" repository.
To summarize: git works well in a way that blockchains don't. But even though they use very similar technologies, git approaches problems in a way that is completely different than Bitcoin does. Most importantly, a lot of people who are enthusiastic about the blockchain see it as a way to make money, whereas people who were enthusiastic about git saw it as a way to solve the problem of having many people develop software projects together. It probably should not be surprising that these worldviews are different, because they are trying to solve different problems. But it is still striking how much better git works than Bitcoin.
I still think the joke is funny. Unfortunately I am like one of those people mocking the Internet in the 1990s. Blockchain probably is going to revolutionize the world, and I will be left in the dust.
Further Reading
I am not the only one to commit the thoughtcrime of questioning The Blockchain. Here are a few articles I have found informative. They also explain what is going on much better than I did.
Charlie Stross: Why I want Bitcoin to die in a fire
Kai Stinchcombe: Ten years in, nobody has come up with a use for blockchain
Kai Stinchcombe: Blockchain is not only crappy technology but a bad vision for the future
Bruce Schneier: There's No Good Reason to Trust Blockchain Technology