As it was originally proposed by Satoshi Nakamoto, Bitcoin was conceived of as a peer-to-peer system that was fundamentally decentralized. Many past and current discussions about the future of Bitcoin acknowledge that too much centralization is a threat to the Bitcoin network. To some extent this process of avoiding centralization has been successful, but in several key areas it has not been very successful and it is in need of redecentralization. The most pressing case for redecentralization in Bitcoin (and cryptocurrencies more generally) is the current development community:
- the number of developers who have experience developing cryptocurrencies is very low, I would estimate there are less than 100 such developers
- the majority of the developers are located in the US and other “Western” nations
- the developer incentive structure with successful cryptocurrencies creates conflicts of interest
In what follows, I propose solutions to these issues cited above. Since we develop our own full-node Bitcoin implementation, btcd, the criticism of the developer community status quo that follows applies not only to other developers, but also our developers who work on btcd.
The Problems
Currently, the reference Bitcoin implementation, bitcoind, has the bulk of its development done by a relatively small core group, say 5 or 6 developers. If you also include the developers of alternative Bitcoin implementations, you may have another 25 people. From the various altcoins there might be 20 people in total. There is a very short list of people that have real experience and domain knowledge of the Bitcoin and altcoin system internals. If cryptocurrencies are going to be the next big asset class, more developers need to understand them on a deeper level.
As if developer scarcity was not enough of a problem, the majority of the developers are based in or citizens of the US and the EU. This leaves the system open to the threat of manipulation by the governments that house development power or key developers, e.g. the US. While the rise of value in BTC/USD has correlated with a shared international consensus that “bitcoin is valuable”, there is no such multi-stakeholder model in place for developer resources. This leads to powerful states, e.g. China, whose capital moves markets not having a stake in the development process.
Bitcoin is the most highly-valued cryptocurrency at the moment, and as such, it serves as a leading indicator for what can happen to the developers and early adopters when the value of the currency soars. While none of us can be sure exactly how much BTC any of the bitcoind developers hold, I expect that most or all of them could live the rest of their lives on their holdings, assuming BTC/USD stays strong. I am all for the process whereby taking risks and contributing to a project early, especially an open source software project, brings great wealth. However, this process creates a warped incentive structure for developers which encourages exactly the kind of behaviors that Bitcoin was constructed to avoid:
- The core developers are a small group of people that can set policy on a whim and are not accountable to anyone, except perhaps miners.
- Developers are trivially incentivized to see competing currencies fail since it means less competition for liquidity for their own currency.
- Developers are disincentivized to enlarge their numbers since it would dilute their power and influence.
- Developers are disincentivized to allow novel additions or changes to an established currency since it could potentially reduce their influence or wealth.
Much of the behavior I describe above is reminiscent of that of central bankers, with the notable similarity that too much concentration of power leads to long-term behaviors that are very negative for the entire ecosystem.
The Solution
The solution to this problem of Bitcoin and altcoin developer centralization is redecentralization of the developer network. I propose this can be achieved in several ways:
- increase the number of skilled cryptocurrency developers by building a community that fosters education and cooperation
- increase the geographical diversity of the development power
- support developers who seek to integrate with your code
- support developers who are building an altcoin on your code
The reasoning that follows can apply to any cryptocurrency codebase, but I will be talking specifically about btcd, our alternative full-node Bitcoin implementation in Go.
Cryptocurrencies and their ecosystem of products take a fair deal of expertise and experience to build, and, currently, that expertise and experience are in short supply. If you read posts on the Bitcointalk forum or academic literature on cryptocurrencies, it is clear that there are far more software project proposals than there are competent developers to code them. In order to help build a community around the btcd source code, Dave Collins, our lead btcd developer, has made a wiki entry describing the code contribution guidelines for developers who are interested in hacking on btcd, btcwallet or btcgui (henceforth the btcd suite). It is our goal to radically include new developers and broaden the developer pool for the btcd suite and services that build upon it.
As part of this effort to build a developer community, Conformal Systems LLC will be offering summer internships to 2 university students during the summer of 2014. We will be accepting applications from current undergraduate and graduate students who are looking to get hands-on experience with cryptocurrencies and related userland applications written in Go. Interns will be expected to work on remote: these internship positions are open to students from any country or timezone, but keep in mind that timezone may factor into our final candidate selection. We will be making a separate blog entry with additional details regarding the internship program in the next 2 weeks.
The majority of existing cryptocurrency developers are located in the US and Western Europe and this needs to change. For a network to be truly decentralized, it requires participation from a wide variety of countries and cultures, not just the “Western” world. It would be ideal to have developers from other Bitcoin hotspots, e.g. China, Japan, India, Argentina and Brazil, and the more independent the local government is from the Western states, the better. Even if some governments are worried about cryptocurrencies, they stand to miss out on participating in what is effectively the next “Gold Rush”. Governments should want their citizens to hold bitcoins and other cryptocurrencies because it leads it leads to fresh gains ready for taxation. Similarly, governments should support development of cryptocurrencies because it is the next and newest asset class, it will not go away. It is far better to have a stake in the ocean than to stand and yell at it when the tide comes in. And, no, you can’t explain that.
We are very supportive of people or organizations that seek to build on top of our software. In order to have a strong financial system, it is necessary to have a wide variety of services that build upon that system. If you are interested in using the btcd suite as part of the backend for a service you offer or are building, come join us in our IRC channel and we can help get you moving in the right direction. Getting more people involved in Bitcoin and other cryptocurrency development is a win for the cryptocurrency economy since it leads to more related services.
One of the areas where the btcd project differs from most other cryptocurrency projects is that we welcome altcoins that want to use our project as a base for their own cryptocurrency. There are several reasons why we are generally receptive to altcoins:
- We do not hold vast amounts of Bitcoins and have a vested interest in their increasing value, to the exclusion of other currencies, like the core Bitcoin developers. We are “crytocurrency liquidity neutral” and believe in the technology over just a single implementation thereof.
- Cryptocurrencies are brittle in the context of changes to their incentive structures: if you start changing the fundamental rules for the system, it can have far-reaching effects. In order to break new ground and test new systems with cryptocurrencies, it must often be implemented in a new currency to prevent it from undermining the value of a more established cryptocurrency.
- Bitcoin, while a brilliant system, is the first such system and cannot possibly hope to have gotten it all right on the first pass. The Ford Model T was a truly epic car, but it was definitely not the only car ever built.
- Bitcoin suffers from the same problem as modern banking: everyone wants a predictable system, which means it can only have so many changes made over time. The requirement of predictability for users bounds what changes can be made to Bitcoin.
While we may not think that all cryptocurrencies are novel from a new technology standpoint, e.g. <internet meme>coin, they do serve to demonstrate that diversity is important to the adoption of cryptocurrencies.
Despite several of the most notable altcoins being essentially trivial variations on Bitcoin, there are several existing and planned altcoins that have implemented or proposed significant changes to the Bitcoin protocol. Among the recently proposed altcoins, I consider MC2 to be the most interesting in that it is not a dramatic departure from Bitcoin, but its Proof-of-Stake model would add novel likely-beneficial dynamics. Mastercoin, Ethereum and other projects also propose a variety of interesting additions to the cryptocurrency landscape and if there is not a developer community to support these innovations, their impact will not be as far reaching.
In order to build a sustainable and resilient future for Bitcoin and other cryptocurrencies there needs to be more geographically-diverse cooperation and collaboration, and we will do what we can to facilitate this change on the developer front. While we don’t have time to hold everyone’s hand or develop your product for you, we will certainly do our best to get you moving in the right direction. If you want to build something using the btcd suite source code, we encourage you to do so and we’ll help you help yourself when it comes to development. We can be reached on the #btcd channel on our IRC server.
There’s really no need for any developers to actively inhibit the developement of alternative cryptocurrencies. The network effect by itself will ensure the market converges towards a single currency standard, and natural market forces are far more powerful than anything said devs can wield anyway.
There’s nothing wrong with altcoins – it’s just that they are a short term phenomena.
TCP/IP didn’t everything right the first try either, but it was the first standard to reach a criticial mass of acceptance such that the benefits of joining into its network effect vastly outweighted missing out on the benefits that competing protocols with lower install bases could offer.
I’m fairly sure Bitcoin is the TCP/IP of cryptocurrency and Litecoin will be its IPX/SPX.
That’s an interesting perspective, but I cannot say I agree.
Just the same way the existing centrally-planned banking system is a poor testing ground for new payment technology, I see Bitcoin as being a bad testing ground for further innovations in payment systems. If you never take real risks with new features, you will never discover the next big thing, and a stable accepted system is often the wrong place to take those new risks.
I totally agree with the let’s decentralize cryptocoin knowledge approach: more altcoins is good! Thank you for delivering this implementation: I was actually porting `picocoin` [a mini implementation in C] to C++, to just learn the implementation details — although I’ve a long coding experience *and* crypto-education, getting to know all the damn details of the bitcoin protocol takes a long time [especially if you’re working part time on this stuff].
Therefore, I was delighted to see open issues [on github] for btcd et. al. consciously making it easy to attract new devs to the project; as soon as I’m done porting `picocoin` I’m looking forward to contribute.
There is some decent amount of concern in “Eastern” countries, how this newest technology from the “West” will affect their economies: projects like these will ease the adoption, and provide desperately needed skill in the emerging markets. Thank you!
It’s great to hear from someone who is not in a Western state about this.
With Bitcoin, as I’m sure you have noticed, the devil is in the details. It is easy for developers to think “I can hack in language X, so cryptocurrencies are just another project”, but the reality is a lot more nuanced.
I look forward to getting your input on the btcd suite and I hope to hear from you in the near future. Just hop on our IRC channel when it suits you.
Hi Jake,
Would you like me to contribute?
-Interested 🙂
Hello Abhay,
You are welcome to contribute – have a look at the code contribution guidelines at
https://github.com/conformal/btcd/wiki/Code-Contribution-Guidelines
I look forward to seeing your code.
Regards,
Jake
You make a lot of good points and I agree with you and applaud you for your efforts and vision.
I am very interested in learning from what you have done. My background is in C and have started learning go. Your work is an inspiration…
Yet I am having challenges getting btcgui built under windows and don’t know where to get help. I’d like to begin educating myself on your work but would like to be able to build all 3 components. I got btcd, btcwallet going but needs some help resolving btcgui errors….
So, where can one go to get some limited assistance??
btcgui errors:
37: error: ‘gtk_stack_get_type’ undeclared (first use in this function)
37: error: ‘GTK_STACK_TRANSITION_TYPE_NONE’ undeclared (first use in this function)
37: error: ‘GTK_STACK_TRANSITION_TYPE_SLIDE_DOWN’ undeclared (first use in this function)
37: error: ‘gtk_button_new_from_icon_name’ undeclared (first use in this function)
37: error: ‘GtkListBox’ undeclared (first use in this function)
37: error: ‘gtk_revealer_get_reveal_child’ undeclared (first use in this function)
37: error: ‘gtk_search_bar_set_search_mode’ undeclared (first use in this function)
……
Thanks for all your work!!
– Galt
Regarding above message about btcgui. I went on your IRC and someone helped me to get it working in like 5 mins. Awesome!!
There is some decent amount of concern in “Eastern” countries, how this newest technology from the “West” will affect their economies: projects like these will ease the adoption, and provide desperately needed skill in the emerging markets.
Thank you!
Good thinks mentioned in blog and also written a nice thought through this blog
Thank you!
Dear Jake, may I use your picture of the “developer network” for an university exposition on Crypto-Currency? A short positive reply would be highly appreciated. Thanks Josh