비트코인 코어와의 경쟁

요약: 이 보고서에서 저희는 “비트코인 코어 (Bitcoin Core)” 소프트웨어 프로젝트의 힘과 역학에 대해 살펴보고 비트코인 소프트웨어 프로젝트와 경쟁할 수 있는 다양하고 각기 다른 방법들 간의 차이점에 대해 알아보겠습니다. 또한 비트코인 코어 소프트웨어 저장소에 비트코인 합의 규칙을 변경하거나 변경을 막는 특별한 기능이 있다는 오해에 대해 설명할 것입니다. 이어서 널리 알려진 몇 가지 오해에 관해서도 다룰 것이며, 만일 비트코인 코어가 삭제되거나 범죄자들에게 장악되더라도 비트코인은 큰 영향을 받지 않을 것이라는 사실에 대해서 설명할 것입니다.

비트코인 코어와 “경쟁”할 수 있는 다양한 방법을 담은 벤 다이어그램

(출처: Bitcoin ABCBitcoin UASFBTCGPUBitcoin XTBTC1Bitcoin ClassicBitcoin Cash CobraBitcoin SV,Bitcoin UnlimitedBitcoinXBitprimBcoinParity BitcoinBTCDLibbitcoinCaesureBits of ProofBitcoinj,Ufasoft CoinBitcrustPicocoinBitcoin AddrinexBitcoin KnotsBitcoin-RBFBitcoin BitMEX Research)

3가지 종류의 경쟁

비트코인 코어와 경쟁 관계에 있는 소프트웨어 프로젝트들은 3개의 그룹으로 분류할 수 있습니다:

경쟁 유형 설명
체인 간 경쟁 이 유형은 경쟁 관계에 있는 소프트웨어 프로젝트가 고의적으로 사용자들이 현재 실행 중인 구현체와 다른 합의 규칙을 가지고 있을 때를 말합니다. 하드포크와 소프트포크 모두 여기에 포함됩니다. 이러한 소프트웨어의 운영은 특정 환경에서 위험한 행위로 간주됩니다. 왜냐하면 해당 소프트웨어가 암호화폐를 두 개의 체인으로 분할시킬 수도 있기 때문입니다. 따라서 이러한 유형의 경쟁은 비트코인의 서로 다른 구현체 (implementations)와 경쟁하기 보다는 다양한 암호화폐/체인들 간에 이루어집니다. 실제로 누군가가 비트코인 코어의 소프트포크를 시행하여 합의 규칙을 변경할 경우, 대부분의 코드는 동일한 개발팀에 의해 작성되었을 가능성이 높습니다. 따라서 이는 개발팀과 경쟁하는 것이 아닌 잠재적으로 동일한 개발팀에 의해 작성된 코드를 가진 새로운 암호화폐를 출시하는 셈입니다.
독립적 구현체 (independent implementations)
간의 경쟁
이 유형의 경쟁은 비트코인이 비트코인 코어에서 코드를 사용하지 않고 재구현 (re-implemented)되었을 경우를 말합니다. 일반적으로 새로운 코딩 언어를 사용하는데, 이는 다른 코딩 언어들의 장점을 흡수하기 위해서 입니다. 첫 번째 유형의 경쟁처럼 다수의 사람들은 이 유형의 경쟁 또한 위험하다고 생각합니다. 그 이유는 이 경쟁이 뜻하지 않게 서로 다른 합의 규칙에 의해 야기된 무계획적인 체인 분할 가능성을 증가시킬 수 있기 때문입니다. 대체 클라이언트 (alternative client)는 소프트웨어 사용자들이 현재 운영중인 합의 행위 (consensus behaviour)와 심지어는 버그 또는 대다수 클라이언트 내의 의도치 않은 행위 (unintended behaviour)와 일치시켜야 합니다.
기타 경쟁관계에 있는 소프트웨어 프로젝트들(합의 규칙을 변경하거나 코드베이스를 재구현하지 않는) 합의 규칙을 변경하지 않고, 독립적인 새 코드베이스를 작성하지 않고도 비트코인 코어와 경쟁할 수 있습니다. 프로젝트의 소프트웨어 포크를 시행한 뒤, 합의 규칙이 아닌 것만 변경하면 됩니다. 이 유형의 경쟁은 위에서 언급한 두 유형보다 많은 위험을 수반하지 않습니다.

경쟁 관계에 있는 합의 규칙에 관한 논쟁

이 주제는 비트코인 커뮤니티 내에서 2015년 여름부터 2017년 11월까지 “블록사이즈 전쟁 (blocksize war)”의 맥락에서 폭넓게 논의되었던 주제입니다. 저희는 이 보고서에서 해당 주제에 대한 모든 주장을 다루지 않을 것이며, 주 목적인 각기 다른 종류의 경쟁을 제대로 설명하기 위해 해당 주제를 활용할 것입니다.

경쟁에 찬성하는 입장 경쟁에 반대하는 입장
합의 규칙에 대한 경쟁은 권장되어야 합니다. 이는 암호화폐의 유동성을 보장하고 적응 및 경쟁할 수 있게 하기 때문입니다. 현상유지 룰셋 (ruleset)의 모델은 논쟁의 여지가 있는 상황에서 소수가 항상 모든 변화에 반대하므로 매우 설득력있는 경우에도 규칙이 절대 변경될 수 없음을 의미합니다. 합의 규칙에 대한 경쟁은 많은 사람들이 생각하는 것보다 심각한 혼란을 가져올 확률은 훨씬 더 낮습니다. 실제로 대기업과 커뮤니티는 하나의 암호화폐를 지지하여 경제젹 다수를 따르거나 해시래이트의 다수를 따를 이들로 고객을 변경합니다. 경쟁은 위험하고 암호화폐의 안정성을 위협하기 때문에 합의 규칙에 대한 경쟁은 피하는 것이 최선책입니다. 논쟁이 생길 경우, 현재의 합의 규칙이 우세할 것이며 이는 비트코인의 중요하고 독특한 특징인 2천 1백만개 발행 한도와 같은 현재의 합의 규칙을 유지하게 합니다. 따라서 폭넓은 합의없이 합의 규칙을 변경했을 경우, 혼란이 야기되는 점은 비트코인의 바람직한 특징이라 할 수 있습니다. 이에 따라 합의 규칙의 변경은 다음의 두 방법 중 하나로 이루어집니다:

  1. 암호화폐 사용자 커뮤니티 그리고 기술 전문가와의 폭넓은 합의 후, 사용자에게 클라이언트를 업그레이드할 충분한 시간을 제공합니다
  2. 개발자가 충분한 수의 사용자들이 새로운 규칙으로 업그레이드할지 확신할 수 없을 때, 이는 새로운 암호화폐가 출시되는 계기가 될 수 있습니다. 이 경우, 탄탄한 양방향 재연 방지 (replay protection)과 체인 와이프아웃 방지가(wipeout protection) (완전 검증 클라이언트와 라이트 클라이언트 둘 다를 위한) 사용자 자금 손실의 위험성을 낮추기 위해 필수적일 것 입니다

(합의 규칙의 변화가 소프트포크를 통해 이루어진 경우 (하드포크와 반대되는), 대다수 마이너들의 업그레이드가 있어도 체인 분할을 막을 수 있을 것입니다)

독립적 구현체 간 경쟁에 관한 논쟁 

위 처럼 이 역시 매우 논란이 많고 논쟁의 여지가 있는 주제이지만, 우리는 합의 규칙을 고의적으로 변경하는 것이 경쟁과는 근본적으로 다른 문제라고 생각합니다.

경쟁에 찬성하는 입장 경쟁에 반대하는 입장
점유율이 가장 높은 구현체 (dominant implementation)가 예기치 못한 합의 버그 (consensus bugs)로 부터 네트워크를 보호할 수도 있지만, 이는 클라이언트의 고장과 예상치 못한 암호화폐 인플레이션을 야기시키는 특정 유형의 치명적인 버그들에 네트워크를 노출시킬 수도 있습니다. 위 같은 상황은 최근인 2018년 9월 발견된 치명적인 인플레이션 버그인 CVE-2018-17144에서 찾아볼 수 있습니다. 예를 들어, 각각 10%의 시장점유율을 가진 10개의 독립 구현체들이 있고, 버그는 클라이언트 고장 또는 인플레이션을 일으킨 하나의 독립 구현체에서만 발생했다면, 네트워크의 나머지 90%는 계속 정상적으로 작동할 수 있습니다. 그러므로 네트워크는 더 큰 회복 탄력성을 갖게 됩니다. 따라서 클라이언트 사용자 실행의 다양성은 중요한 원동력입니다. 이 유형의 경쟁에 있어 가장 강력한 반대론자는 아마도 사토시일 것입니다. 그/그녀는 다음과 같은 유명한 말을 남겼습니다:

저는 제 2의 호환성있는  비트코인의 구현체가 좋은 아이디어라 생각하지 않습니다. 설계의 대부분은 모든 노드가 철처하게 동일한 결과를 얻는 데에 달려있으며, 이 결과는 네트워크에 위험한 영향을 줄 것입니다. MIT 라이선스는 다른 모든 종류의 라이선스 및 상업적 용도와 호환되므로 라이선싱 (licensing) 측면에서 이를 재작성할 필요가 없습니다.

두 번째 버전은 저에게 엄청난 발전과 동시에 유지보수의 번거로움을 가져다 줄 것입니다. 두 번째 버전의 로크 인 (locking in) 없이 네트워크를 업그레이드 하는 동안 하위 호환성 (backward compatibility)을 유지하는 것은 어려운 일입니다. 두 번째 버전이 실패할 경우, 사용자 경험은 두 버전에 모두 부정적으로 반영될 것입니다. 비록 공식 버전을 계속 이용하는 것의 중요성을 사용자에게 강하게 인식시켰지만 말입니다. 누군가 두 번째 버전의 포크를 준비하고 있다면, 저는 소수 버전 사용에 대한 위험성을 담은 수 많은 고지사항 (disclaimers)를 발표해야 할 것입니다. 이 설계 방식은 의견 차이가 있을 경우 다수가 지지하는 버전이 승리하는 설계 방식이며, 소수 버전의 지지자들이 보기엔 매우 탐탁지 않을 것입니다. 저는 소수 버전을 이용하지 않을 것이며, 하나의 버전이 있는 한 소수 버전을 이용할 필요 또한 없을 것입니다.
(출처: Bitcointalk)

10개의 선호도 높은 구현체들이 있다는 것은 좋은 일입니다. 그러나 문제는 점유율이 가장 높은 단일 구현체로부터 네트워크를 합의 버그에 취약하게 만들 수 있는 각각 50%의 시장점유율을 지닌 두 개의 인기있는 독립 구현체와 같은 위험한 영역으로의 진입없이 다양한 클라이언트들로 이행되어가는 과도기의 문제입니다. 따라서 합의 버그를 최소한으로 유지하기 위해 철저한 검증을 거친 점유율이 가장 높은 단일 구현체를 확보하는 것이 더 나은 계획일 수 있습니다. 이 방법을 통해 모든 사용자가 네트워크를 신뢰할 수 있으며, 10%의 소수 체인은 10%의 사용자들에게 문제가 될 수 있습니다.

기타 경쟁 관계에 있는 클라이언트들

합의 규칙에 대한 경쟁을 반대하며 탄탄한 룰셋을 매우 선호하고, 구현체 간 경쟁에 관한 사토시의 부정적 견해를 맹목적으로 신봉하는 이가 있다해도 그것이 곧 그/그녀가 경쟁 소프트웨어를 보유해선 안된다는 것을 의미하지는 않습니다. 이 경쟁은 앞서 소개한 벤 다이어그램의 바깥 쪽, 백지와 같은 영역에서 이루어집니다. 합의 규칙의 고의적 변경과 코드의 재구현 또한 없는 이 유형의 경쟁은 저희가 말할 수 있는 한, 전혀 논쟁의 여지가 없습니다.

따라서 비트코인은 이론상으로 깃허브 (Github) 내의 특정 소프트웨어 저장소를 관리하는 사람이 누구인가 혹은 저자오 접근 권한을 가진 이는 누군인가와 같은 문제에 시달릴 필요가 없습니다. 저희는 이 문제들이 소프트웨어 프로젝트 간의 경쟁 위험성을 인식하고는 인지만, 서로 다른 유형의 경쟁을 올바르게 구분짓는데 실패한 이들에 의한 오해에서 비롯된 것이라고 생각합니다. 이런 이유로 많은 사람들은 모든 경쟁을 위험하거나 어딘지 모르게 용납할 수 없는 것으로 여기며 비트코인 코어의 위력을 과대평가하는 것처럼 보입니다.

비트코인 코어의 기원

2013년 이전에는 비트코인 코어라는 이름의 소프트웨어 프로젝트가 존재하지 않았습니다. 사토시 클라이언트는 단순히 참조 구현체 (reference implementation) 혹은 비트코인-QT/비트코인드 (Bitcoin-QT/Bitcoind)라고 불렸습니다. 그 해 2월, 주요 비트코인 개발자인 Gavin Andresen은 비트코인 재단 포럼에 다음과 같은 글을 올렸습니다:

오늘 있었던 인터넷 채팅에서 비트코인-Qt와 참조 구현체의 명칭을 변경하는 것에 대한 논의가 있었습니다; 저는 명석한 두뇌를 가진 여러분이 좋은 이름을 붙여주실거라 생각합니다.

그러자 또 다른 개발자인 Mike Hearn이 이렇게 대답했습니다:

좋아요. 드디어 이름을 정할 때가 왔군요. 한동안 이것 때문에 골머리를 앓았는데, 비트코인 코어는 어때요?
(출처: Bitcoin Foundation Forum)

실질적으로 변한 것은 없지만 이 때부터 많은 사람들이 해당 소프트웨어를 “비트코인 코어”라 부르기 시작했습니다. 비트코인 코어는 신중함과 안정성을 갖춘, Gavin의 말에 따르면 “바위처럼” 탄탄한 브랜드를 개발하기 시작했습니다.

“블록사이즈 전쟁”이 끼친 영향

블록사이즈 전쟁 동안 많은 사람들은 이 논쟁을 하드포크와 블록 사이즈 제한 증가에 반대하는 비트코인 코어 측 대 마이너 또는 대기업 간의 논쟁으로 특징지었습니다. 저희는 이 정의의 대부분이 잘못되었다고 생각합니다. 그러나 하드포크가 실행되지 않았기 때문에 이러한 정의를 만든 이들은 차후에 비트코인 코어가 우세하다고 결론지었습니다. 따라서 저희는 이 부류의 사람들이 현재 비트코인 코어의 힘을 과대평가하고 있다고 생각합니다.

비트코인 코어는 많은 이들이 생각하는 것 만큼 강력하지 않습니다

비트코인 합의 규칙을 규정하는 것은 비트코인 코어 소프트웨어 저장소가 아닙니다. 대다수의 사용자들이 현재 효율적으로 운영 중인 클라이언트들이 합의 규칙을 규정합니다. 이것들은 보통 이전에 공개된 비트코인 코어 버전입니다. 비트코인 코어 소프트웨어 프로젝트는 소프트웨어 사용자들이 실행 중인 것을 임의로 변경할 수 없으며, 사용자들은 많은 이들이 생각하는 것 보다 훨씬 더 독립적입니다. 비트코인 코어가 블록 사이즈 제한을 증가시키는 하드포크 클라이언트를 출시한다해도 커뮤니티가 업그레이드를 받아들일지는 확실하지 않습니다. 따라서 비트코인 코어 소프트웨어 저장소가 삭제, 해킹 혹은 장악되는 문제는 사람들의 생각보다 심각한 문제가 아닐 것입니다. 실제로 이런 일이 발생한다해도 실행 중인 클라이언트 사용자들에게는 영향을 주지 않을 것이며 추가적인 업그레이드나 개선이 필요한 경우, 사용자는 어떠한 조정 문제나 다른 위험성에 대한 걱정없이 다른 저장소로 옮기면 됩니다.

실제로 2017년 여름, 비트코인 UASF라는 클라이언트가 비트코인 코어와 경쟁하여 비트코인 코어를 무너뜨리고 고의적으로 네트워크 합의 규칙을 변경했습니다. 결론내리자면, 비트코인 코어가 가장 강력하다는 것은 블록사이즈 전쟁을 통해 얻은 잘못된 교훈일 뿐입니다.

비트멕스 리서치 (BitMEX Research)팀은 비트코인 코어와 경쟁할 새 클라이언트를 출시할 예정입니다 (이 글은 설명을 돕기위한 목적으로 작성되었습니다)

오늘 비트멕스 리서치 (BitMEX Research)팀은 비트코인 코어와 경쟁할 새 클라이언트인 비트코인 비트멕스 리서치 (Bitcoin BitMEX Research)의 출시를 발표했습니다. 이 클라이언트는 비트코인 코어의 소프트웨어 포크이기 때문에 사토시의 우려처럼 버그 호환성에 대한 버그 위험성을 수반하지 않습니다. 또한 비트멕스 리서치 클라이언트 (BitMEX Research client)는 비트코인 합의 규칙을 변경하지 않으므로 논란의 여지가 있는 체인 분할의 위험이 없습니다. 따라서 비트코인 코어 저장소가 장악되거나 삭제되어도 코드베이스는 비트멕스 리서치 클라이언트 (BitMEX Research client) 혹은 다른 클라이언트를 이용해 계속 개선될 수 있을 것입니다.

결론

블록사이즈 전쟁 결의안이 발표된 후, 비트코인 코어 소프트웨어 저장소의 위력은 지나치게 강조되었습니다. “저장소를 관리하는 이는 누구인가?”, “그들이 비트코인 코어 깃허브 (GitHub)를 삭제하면 어떻게 될 것인가?” 같은 것들은 이제 흔한 질문이 되어버렸습니다. 저희는 이런 질문들이 비트코인의 요점을 놓친 이들이 있음을 분명히 보여준다고 생각합니다.

사람들은 비트코인 프로토콜 규칙을 관리 및 통제해 줄 누군가를 원하는 경향이 있습니다. 블록사이즈 전쟁 이전과 전쟁 도중 다수는 이를 마이너, 대기업 혹은 비트코인 개발자 중 하나인 Gavin Andresen이라 생각했습니다. 이 전쟁이 낳은 예상치 못한 부정적인 결과 중 하나는 많은 사람들이 비트코인 코어가 이 역할을 한다라고 생각을 바꾼 것입니다. 인정하기 힘들겠지만 실제로는 최종 사용자가 궁극적으로 비트코인을 관리 및 통제합니다.

물론 위에서 언급한 내용이 비현실적일 수도 있고 실제로는 ASIC 제조사, 대형 마이닝 팜, 개발자, 대형 보관기관, 대형 거래소 심지어는 개별 소프트웨어 저장소가 훨씬 높은 영향력을 가지고 있는것이 사실입니다. 궁극적으로 사용자가 비트코인을 관리 및 통제한다고 말하는 것은 이상적일 수 있습니다. 하지만 그렇다면 “사용자가 관리하는 자금”의 의미는 무엇일까요? 사용자가 비트코인을 관리한다고 생각하지 않는다면, 비트코인은 정확히 누구를 위한 것일까요?