btcd 1.0 was released October 3, 2013. Why use it instead of bitcoind?
EDIT (2014-09-05): I have updated this answer to the most recent information. The previous answer was outdated in regards to the cons. It was accurate as of version 0.3.0-alpha, however btcd is now in beta, up to version 0.8.0-beta, and nearly all of the previous cons have since been addressed. Also, I've updated all references to bitcoind to Bitcoin Core to reflect their name change
I'll try to answer this as unbiased as possible, but, as a disclaimer, I am the lead developer for btcd.
First, a small correction. The initial release is version 0.3.0-alpha (https://github.com/conformal/btcd/releases). It is not yet up to version 1.0 as we first want to get a ton of public testing from early adopters before claiming it is production ready. We fully understand the importance of avoid block chain forks and are making herculean efforts to do everything we can to prevent that from happening.
I'll provide a list of pros and cons that I can think of for btcd relative to Bitcoin Core below, but one thing I'd like point out isn't specifically related to btcd or Bitcoin Core, but rather the Bitcoin ecosystem as a whole.
Diversity is something the Bitcoin ecosystem is in dire need of. Diverse, inter-operating implementations make the Bitcoin network more robust against several things such as denial-of-service attacks, vulnerabilities, and individual application bugs. History has shown that for any protocol to thrive and gain wide-spread acceptance, multiple implementations on multiple devices is inevitably required. One prolific example is TCP/IP. TCP/IP would not be where it is today if only a single implementation existed.
- btcd offers a unique architecture in that it separates the chain services from the wallet services (see NOTES [a])
- btcd is written in Go which has several advantages over C++ (See NOTES [b])
- btcd is a clean refactor of the entire Bitcoin protocol rather than one that is monolithic
- the btcd codebase strives to provide easy to follow and well-commented code (Bitcoin Core is definitely improving in this area, but there is still a lot of undocumented "magic")
- the btcd core packages provide more extensive unit test coverage to help prevent regressions (for example btcwire provides 100% test coverage)
- btcd incorporates a package that has been highly optimized specifically for the ECDSA curve parameters used by Bitcoin (secp256k1) making it faster than OpenSSL
- btcd is capable of running as a real service on Windows (see NOTES[c])
- btcd provides a compatible RPC interface with Bitcoin Core has which makes it relatively straight forward to use it in existing infrastructures
- btcd is able to sync the entire block chain from scratch in around 5 hours on an Intel i7 with an SSD
- btcd does not daemonize itself and instead relies on external tools such as daemonize and upstart to perform that function
- The uPnP functionality is currently disabled by default and does not appear work with all devices, so it might be necessary to manually open ports on your router and use the --externalip flag
[a] A full discussion of the advantages of separating the chain and wallet services would require an entire blog post, but a few examples are that it opens a lot of opportunities for lower powered hardware, offers better multi-user support, and results in less waste in small networks which can share the chain services.
[b] Some advantages we believe Go has over C++
- Integrated test infrastructure
- Platform independent code
- Simpler parallelism and excellent support for concurrency
- No active memory management which leads to eliminating an entire class of the most common security vulnerabilities like buffer overflows
- Built-in profiling and documentation facilities
- Significantly faster compilation times
[c] The Windows installer does not provide the option to install or run it as a service, however btcd itself has command line options to do so. To install it as a service: btcd.exe /s install