비트코인을 포함한 모든 가상 화폐는 open source에 기반합니다. 따라서 Github에 가면 어떻게 만들어져 있는지를 모두 볼 수 있습니다.
오랫동안 Software를 한 관점에서 보면, 다음과 같은 평가가 가능합니다.
- Software의 요구사항(주로 백서에 나와 있습니다.)
- 무엇을 해결하려고 하는 것인지
- 그래서 무엇이 구현되었는지
- 순수하게 기술적으로 branch관리는 어떻게 하는지?
- 리뷰는 어떻게 하는지?
- 관련된 commit들은 위의 내용과 잘 맞는지?
- 개발자와 각각의 이력이 어떤지?
- Commit 또는 pull request의 주기가 어느 정도인지?
- 이슈는 잘 분류되고, 적절한 기간에 해결되는지?
가 기술적인 평가의 기준이 될 것 같고, 이 중에서 대표적으로
Commit의 내용이 어떤지?
형상 관리가 잘 되고 있는지?
요구사항이 잘 구현되어 있는지?
가 가장 빠르게 볼 수 있는 내용이 아닐까 합니다.
우선, 이를 보기 위해서는 Github에 가야 합니다.
각 Coin들의 Github는 아래에 사이트에 정리되어 있습니다. 아래는 하기 사이트중 리플의 예입니다.
https://www.coingecko.com/en/coins/ripple/developer#panel
Git은 개발한 software를 저장하는 곳이고, Github는 Web을 통해서 무료로 Git을 제공하는 사이트입니다.
굳이 이렇게 공개된 곳에 Git을 만들필요는 없지만, 이래야 여러사람들이 한번에 작업하기가 편합니다.
Commit은 개발한 소스들을 Git에다가 보내는 과정이라고 보시면 됩니다.
그리고 Pull request는 주로 branch를 합칠때 사용합니다.
Branch는 임시 작업장 이라고 생각하시면 됩니다.
즉 임시 작업장에 commit을 하고, 이 임시 작업장을 pull request를 통해서 진짜 작업장 혹은
상용 버전에 합치게 됩니다. 물론 직접 상용 버전에 commit을 올려도 됩니다만, 시험도 하지 않고
올리는 것은 매우 위험한 일입니다.
이와 같은 상용 버전을 보통 master branch라고 하고, 임시 작업장들은 임의로 이름을 붙이게 됩니다.
예를 들어 main version으로 상용화 서비스 중이고, 대규모 업그레이드 준비중이라면 version2 branch를
만듭니다. 그리고 그 중에 다시 새로운 기능을 추가해야 하면 version3를 만듭니다.
version2를 시험해서 문제가 없으면 master branch에 pull request를 해서 합치고, 다시 version3에도 문제가 없으면
master branch에 합칩니다.
이렇게 합쳐지는 소스 코드는 어떤 부분이 추가되고, 변경되고, 삭제되었는지를 github에서 확인할 수 있습니다.
따라서 commit이 많다고 좋은 것도 아니고, 적다고 나쁜것도 아니고, 그 내용이 중요합니다. 예를 들어 아무 기능도 하지 않는 source를 매일마다 100개씩 commit하면 commit양이 많다고 자료에 잡히겠지만, 실제로는 아무일도 일어나고 있지 않은 것입니다.
그리고 Fork는 새로운 개발 또는 참고를 하기 위해서, 현재의 소스를 받아간 수라고 보시면 됩니다. 따라서 Fork가 많을수록 인기있는 소스라고 볼수 있습니다. 물론 여기에도 abusing이 존재하니 개수만으로 판단하시면 안됩니다.
https://github.com/tronprotocol/java-tron/pulls?q=is%3Apr+is%3Aclosed
에서는 현재 closed된 Tron의 pull request를 보실 수 있습니다.
이 중에서 아래와 같은 pull request가 있고
Switch to Java 8 lambda style
#30 by jungrammer was merged 28 days ago
이의 세부 내용은
https://github.com/tronprotocol/java-tron/pull/30
에서 보실 수 있습니다.
세부 내용은 아래와 같이 나와 있습니다.
What does this PR do?
Switch to Java 8 lambda style
Why are these changes required?
Java 8 already has a good [java.util.function.Function] interface, so there is no need for a [org.tron.utils.Functional] interface
This PR has been tested by:
Unit Tests
Manual Testing
Follow up
I hope that tron, a Java-based project with few things, will succeed.
이제 진짜 내용을 확인하기 위해서 소스를 열어 보아야 합니다.
https://github.com/tronprotocol/java-tron/commit/2fce5efb6a33ffd45ba20d61a8bc4b45c8266de3
이 실제 변경된 내용입니다.
더하기 표시는 내용이 추가된 것이고, 빼기 표시는 내용이 빠진 것입니다.
Showing 3 changed files with 28 additions and 100 deletions.
와 같이 3개의 파일이 바뀌었고, 28줄의 추가와 100줄의 삭제가 있었다는 것을 볼 수 있습니다.
변경이 많은 이유는 주석의 삭제와 JAVA8의 feature로 변경된 것을 볼 수 있고, 기능상의 변화는
찾아볼 수 없습니다.
즉 개발팀 입장에서는 source code의 품질을 올린다는 장점이 있겠으나, 자원 투입의 입장에서 본다면 다른 급한 일과의 Return of investment는 고려햐 보아야 하는 문제입니다.
위와 같이 간단히 예를 들어 드렸구요, 저는 요즘 관심이 있는 코인들에 watch를 걸어놓고, 계속해서 이메일을 받아보고 있습니다. 위에 설명에는 없었지만, 어떤 내용으로 review를 하는지도 중요한 요소여서, 이를 메일로 받아 보고 있습니다.
결국 요지는..
거의 모든 새로 나오는 코인들이, 기존 코인을 개선한 혹은 새로운 곳의 적용을 주장하고 있습니다. 결국 이러한 개선이나 주장은 요구사항이되고, software의 구현에 반영이 되어야 합니다.
또한 새로운 문제가 발생하거나(예를 들어, 특정 지갑으로 전송이 안되는 경우), 혹은 추가 요구사항이 생기는 경우 이에 대한 개발이 되어야 하고,
이를 볼 수 있는 곳이 Github입니다.
다만, Github의 새부 내용을 보니 않고, 통계적인 수치만으로는 정확한 내용을 볼 수 없는 단점이 있습니다.
긴글 읽어 주셔서 감사합니다.