|
wumpus
|
 |
October 28, 2013, 09:58:30 AM |
|
Is it possible to build a "no dependency" client? Just integrate all (and only) necessary external codes, e.g. SSL, so people can build it without depending on any package.
You could use sipa's secp256 library instead of OpenSSL, that makes the blockchain handling code less dependent of third parties: https://github.com/sipa/secp256k1 (as a bonus, it's faster too!) Note: this is at your own risk, the library is far from as well-tested as OpenSSL is. Handling cryptography is very fickle and a decision to switch the main client over is not taken lightly. We agree that modularization is a goal, my question is if we should we tackle it with highest priority.
That's up to you! Everyone in the core team has their own priorities, and they may or may not overlap with yours (though we all agree that modularization is a good thing, but it's just not our pet project). You're welcome to join and patches are welcome!
|
Bitcoin Core developer [PGP] Warning: For most, coin loss is a larger risk than coin theft. A disk can die any time. Regularly back up your wallet through File → Backup Wallet to an external storage or the (encrypted!) cloud. Use a separate offline wallet for storing larger amounts.
|
|
|
|
|
|
|
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
|
|
|
|
|
piotr_n
Legendary
Offline
Activity: 1932
Merit: 1018
aka tonikt
|
 |
October 28, 2013, 10:10:37 AM |
|
Is it possible to build a "no dependency" client? Just integrate all (and only) necessary external codes, e.g. SSL, so people can build it without depending on any package.
With this code, just getting rid of boost seems quite impossible. LevelDB - one would need to create a new db engine, from scratch, wanting to get rid of this one. But LevelDB is an internal code already, so I guess it could stay. It's a fairly simple one and easy to audit. As for OpenSSL - I guess you could embed the hashing functions into the code and use the ecdsa functions made by sipa. The rest (berkeley, upnp, zlip, png & qr) should be much easier to remove. EDIT: Oh, wait... WTF is protobuf? You guys are not giving up adding more crap in, are you? 
|
Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.PGP fingerprint: AB9E A551 E262 A87A 13BB 9059 1BE7 B545 CDF3 FD0E
|
|
|
|
wumpus
|
 |
October 28, 2013, 10:16:41 AM |
|
With this code, just getting rid of boost seems quite impossible.
Until the parts that we use of boost are part of the C++ library (which may happen in the future), getting rid of boost is not even a goal. This means cross-platform thread handling, synchronization handling, asynchronous network handling, etc. The only other option would be to embed cross platform compatibility layers in the code base itself, but that would increase the amount of code (NIH syndrome) to audit, test and maintain not decrease it. C++ is just not a good language if you want self-contained code. There are no batteries included. This improved with C++11 though and we do plan on switching over to that and using C++11 functionality where appropriate instead of boost.
|
Bitcoin Core developer [PGP] Warning: For most, coin loss is a larger risk than coin theft. A disk can die any time. Regularly back up your wallet through File → Backup Wallet to an external storage or the (encrypted!) cloud. Use a separate offline wallet for storing larger amounts.
|
|
|
|
wumpus
|
 |
October 28, 2013, 10:17:12 AM |
|
EDIT: Oh, wait... WTF is protobuf? You guys are not giving up adding more crap in, are you?  Protobuf is only used for the GUI (payment requests) and not for the core, so it is already optional. The only required external dependencies for the core are: - boost (extended C++ library) - berkelydb (wallets, would be nice if this was optional when nowallet mode is used) And one of - OpenSSL - secp256k1 library Believe me, that's not a lot for an open source project.
|
Bitcoin Core developer [PGP] Warning: For most, coin loss is a larger risk than coin theft. A disk can die any time. Regularly back up your wallet through File → Backup Wallet to an external storage or the (encrypted!) cloud. Use a separate offline wallet for storing larger amounts.
|
|
|
piotr_n
Legendary
Offline
Activity: 1932
Merit: 1018
aka tonikt
|
 |
October 28, 2013, 10:18:46 AM |
|
With this code, just getting rid of boost seems quite impossible.
Until the parts that we use of boost are part of the C++ library (which may happen in the future), getting rid of boost is not even a goal. Yeah. Part of the C++ library, which I need like an hour to build. EDIT: Oh, wait... WTF is protobuf? You guys are not giving up adding more crap in, are you?  Protobuf is only used for the GUI (payment requests) and not for the core, so it is already optional. I thought someone once said here that the payment protocol does not add any more external libs. Well, I guess he was wrong again... 
|
Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.PGP fingerprint: AB9E A551 E262 A87A 13BB 9059 1BE7 B545 CDF3 FD0E
|
|
|
jl2012
Legendary
Offline
Activity: 1792
Merit: 1010
|
 |
October 28, 2013, 10:21:00 AM |
|
Is it possible to build a "no dependency" client? Just integrate all (and only) necessary external codes, e.g. SSL, so people can build it without depending on any package.
You could use sipa's secp256 library instead of OpenSSL, that makes the blockchain handling code less dependent of third parties: https://github.com/sipa/secp256k1 (as a bonus, it's faster too!) Note: this is at your own risk, the library is far from as well-tested as OpenSSL is. Handling cryptography is very fickle and a decision to switch the main client over is not taken lightly. We agree that modularization is a goal, my question is if we should we tackle it with highest priority.
That's up to you! Everyone in the core team has their own priorities, and they may or may not overlap with yours (though we all agree that modularization is a good thing, but it's just not our pet project). You're welcome to join and patches are welcome! Can we just embed the relevant part of OpenSSL to the code, so we don't need to worry about compatibility?
|
Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY) LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC) PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
|
|
|
piotr_n
Legendary
Offline
Activity: 1932
Merit: 1018
aka tonikt
|
 |
October 28, 2013, 10:29:16 AM |
|
Can we just embed the relevant part of OpenSSL to the code, so we don't need to worry about compatibility?
Personally, I would rather advise you to replace it with the code made by sipa, so you would not need to worry about NSA backdoors 
|
Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.PGP fingerprint: AB9E A551 E262 A87A 13BB 9059 1BE7 B545 CDF3 FD0E
|
|
|
|
Pieter Wuille
|
 |
October 28, 2013, 10:32:20 AM |
|
Can we just embed the relevant part of OpenSSL to the code, so we don't need to worry about compatibility?
Personally, I would rather advise you to replace it with the code made by sipa, so you would not need to worry about NSA backdoors  In due time. At this point, it hasn't by far received enough auditing to become responsible for securing millions of dollars in transfers.
|
aka sipa, core dev team
Tips and donations: 1KwDYMJMS4xq3ZEWYfdBRwYG2fHwhZsipa
|
|
|
piotr_n
Legendary
Offline
Activity: 1932
Merit: 1018
aka tonikt
|
 |
October 28, 2013, 10:44:15 AM |
|
Can we just embed the relevant part of OpenSSL to the code, so we don't need to worry about compatibility?
Personally, I would rather advise you to replace it with the code made by sipa, so you would not need to worry about NSA backdoors  In due time. At this point, it hasn't by far received enough auditing to become responsible for securing millions of dollars in transfers. It's an admirable stand, but we are talking about wallet-less node here and something that only a small percentage of the net would use anyway. I don't see a potential for a big damage - the worst thing that can happen is a chain fork, that would only speed up the process of maturing your fine lib. If someone wants to secure receiving millions of dollars, I'd rather advise him to use more than one node while making sure that he received the money - a totally different ones, using not only different ECDSA libs, but basically different everything. And run them on different PCs..
|
Check out gocoin - my original project of full bitcoin node & cold wallet written in Go.PGP fingerprint: AB9E A551 E262 A87A 13BB 9059 1BE7 B545 CDF3 FD0E
|
|
|
kjj
Legendary
Offline
Activity: 1302
Merit: 1001
|
 |
October 28, 2013, 07:18:25 PM |
|
Is it possible to build a "no dependency" client? Just integrate all (and only) necessary external codes, e.g. SSL, so people can build it without depending on any package.
Just FYI, I routinely make static-ish builds. My mining distro is based on Debian, but the bitcoind binary on it is build on an ancient slackware box with wildly different libraries. Fudging the makefile for a static build gives me a binary that will run just about anywhere. On the original topic, rather than a fork, why not build options? This would reduce the maintenance delta to a hopefully manageable level. It is even something that could be done incrementally.
|
17Np17BSrpnHCZ2pgtiMNnhjnsWJ2TMqq8 I routinely ignore posters with paid advertising in their sigs. You should too.
|
|
|
|