일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- type
- git
- AI
- Python
- npm
- C#
- JavaScript
- Clone
- loop
- machine learning
- docker
- var
- condition
- TypeScript
- BOJ
- dotenv
- bash
- webpack
- security
- VUE
- C++
- vuetify
- 보안
- property
- 앙상블
- scss
- leetcode
- generic
- nginx
- vue.js
- Today
- Total
ice rabbit programming
[Git] 오픈소스 소프트웨어에 대한 간략한 개요 본문
Git은 SVN과 같이 협업이나 버전 관리 툴로 사용되지만, 아마 많은 학생 개발자들이 Git을 처음 접하는 것은 GitHub를 통해서일 것이다. Github는 hub라는 문자 그대로, 오픈소스 프로젝트들이 모여있는 것이다. 비유하자면 프로그래밍판 SNS라고 생각할 수 있겠다.
오픈소스
먼저, 오픈소스란 개념에 대해서 짚고 넘어가자. 오픈소스는 저작권자가 누구나 자유롭게 사용/수정/재배포할 수 있도록 공개한 소프트웨어이다. 이 중에 '누구나 자유롭게'라는 부분 때문에 오픈소스는 그냥 무료인 소프트웨어 정도로 생각하는 사람도 꽤 되는데, 그렇지는 않다.
오픈소스와 반대로 상용 소프트웨어는 Binary 실행 파일만 제공되는데, 무료인 소프트웨어, 즉 상용 프리웨어는 실행 파일만 제공된다. 무료일 뿐, 오픈소스가 아니라 상용 소프트웨어이다. 오픈소스의 요건을 충족하려면 소스코드가 제공되어 수정/복제/배포가 가능해야 한다.
오픈소스 라이센스
위에서 누구나 사용/수정/재배포라고 했지만, 물론 아무렇게나 할 수 있는 것은 아니다. 아마 이 글을 읽으러 들어오실 정도면 Github도 많이 이용해보셨을 테고, MIT 라이센스, Apache 라이센스 등을 들어보신 적이 있을 것이다.
우선 전제로 얘기해야할 부분은, 오픈소스라고 저작권이 없는 것은 절대 아니다. 상용 소프트웨어와 오픈소스 모두 지적재산권 보호를 받으며, 라이센스 위반 시 처벌이 가능하다. 일단 정의를 보자.
오픈소스 라이센스 : 저작권자의 독점 사용 권리에 대해 저작권자/사용자 간의 이용 방법 및 조건 범위를 명시해 둔 사용 허가권
이 라이센스는 파생 저작물을 외부로 배포할 경우에 적용되는데, 쉽게 말하면 오픈소스를 사용해서 무언가를 새로 만들어서 외부에 배포할 때 지켜야하는 것들이 오픈소스 라이센스이다. '배포할 때'이기 때문에 내부 사용만을 목적으로 할 때는 적용이 되지 않고, Binary를 배포할 때 효력이 발생한다. 보통 오픈소스 라이센스는 README나 LICENSE 파일에 따로 명시해두며, 코드 윗 부분에 적기도 한다.
보통은 오픈소스 출처/원저작자 명시(논문 인용처럼), 수정 부분 고지, 라이센스 사본 유지 등의 준수 사항이 들어있는데, 라이센스 종류는 굉장히 많다. '니 맘대로 쓰세요'하는 라이센스부터 배포의 개념이 다른 라이센스 까지 다양한데, 모두 외우고 있을 필요는 없고, 실제로는 약 10개 정도가 80%를 차지한다.
라이센스의 분류
먼저 Permissive 라이센스가 있는데, MIT, Apache 라이센스 등이 이에 속한다. 의무 사항이 많지 않아 상대적으로 준수하기 쉬우며, 위에서 말한 저작권 표시나 라이센스 고지 등만 준수하면 사용할 수 있다.
Copyleft 라이센스는, 의무사항이 많고, 소스 코드 공개를 해야 하는 경우가 많다. GPL, LGPL, MPL 라이센스 등이 있다.
때문에 보안이 중요한 기업에서의 결과물에는 GPL같은 Copyleft 라이센스를 포함하지 않는 경우가 많다. GPL이 들어가면 사용된 코드를 전부 공개해야 하기 때문이다. 오픈소스 고지문은 어느 앱 서비스에나 들어가 있어야 하므로, 쉽게 참고할 만한 자료를 찾아볼 수 있다.
결론적으로는, 오픈소스를 사용할 때에는 마구잡이로(코드 레벨에서 봤을 때에도 작은 단위 보다는 클래스 단위, 모듈 단위가 권장된다) 사용하는 것이 아닌 라이센스에 맞게 사용하는 것이 중요하며, 혹여나 보안이 중요한 경우에 Copyleft를 사용하여 곤경에 빠지는 일이 없도록 하자.
'Development > Git' 카테고리의 다른 글
[Git] 특정 브랜치만 clone(feat. pull) (0) | 2020.12.09 |
---|---|
[Git] merge vs rebase(feat. squash) (0) | 2020.09.20 |
[Git] Clone할 때 브랜치/폴더명 지정하기 (0) | 2020.09.05 |
[Git] 임시 저장, Stash (0) | 2020.06.06 |
[Git] git에서 branch로 flow 관리하기 (1) | 2020.05.17 |