[기술 컬럼] Open Source 개념 및 활용



오픈 소스란?

소스코드, 디자인 문서, 제품 내용 등을 공개해 누구나 수정, 재배포할 수 있는 소프트웨어를 말합니다.

오픈소스 ≠ 프리웨어

오픈소스는 소스코드가 공개되어있어 흔히 무료라고 생각하지만, 이는 잘못된 인식입니다.
오픈소스는 각 프로젝트의 라이선스에 따라 몇가지 제약사항이 존재하며,
상업적으로도 많이 활용되어 유료인 경우도 존재합니다.

오픈소스 프로젝트들도 저작권이 존재하며 오픈소스 라이선스를 통해서
각 프로젝트의 제약사항과 저작권, 상업적 사용 등의 항목에 대해서 명시하고 있습니다.

아래 표는 주로 사용되는 오픈소스 라이선스와 각 라이선스의 특징을 나타내고 있습니다.

2차적 저작물 재공개 의무, 독점SW와 결합 가능
O 표시가 되어있는 라이선스의 경우 주의해서 사용해야합니다. 


* 출처 : 오픈소스SW 라이선스 가이드 <<정보통신부, 컴퓨터프로그램보호 위원회>>

아래 주의해야할 라이선스들의 특징과 적용 사례를 참조하시면 이해하기 편하실겁니다.

 특징 적용사례
 LGPL수정한 소스코드 LGPL로 공개
LGPL Static Linking으로 사용하면 전체 소스코드 공개 
 모질라 파이어폭스(v2.1)
 GPLGPL 소스코드를 이용한 소프트웨어는 전체 GPL로 공개 리눅스 커널(v2.0)
 AGPL AGPL 소스코드를 이용한 소프트웨어 전체 AGPL로 공개
웹서비스로 제공되는 서비스 포함
 몽고DB(v3.0)
 MPL소스 코드와 실행 파일의 저작권을 분리한게 특징
MPL의 경우 수정한 코드에 대해서는 원작자에게 알리고 
소스 코드를 공개해야하지만 실행파일에 대해서는 
별도의 라이선스를 적용할 수 있습니다.
 모질라 파이어폭스


라이선스의 위반

라이선스 표와 제약사항을 확인하며 사용하다보면 어렵고 불편합니다. 
그래서 소스가 모두 공개되어 있기 때문에 마음만 먹으면 
라이선스를 준수하지 않고 무단으로 사용하려고 할 수 있습니다.

그러나 수 많은 오픈소스 프로젝트 사용자들과 오픈소스 관련 재단들이 
라이선스 위반 사례에 대해 확인하고 있으며 라이선스에 따라서 저작권법에 저촉될 수 있습니다.   

미국법원에서는 오픈소스 라이선스가 집행력 있는 계약임을 인정하고 있고 
라이선스 소송은 본국이 아닌 다른 나라에서도 가능하기 때문에 법적 제재를 받을 수 있어 
라이선스에 대해 충분히 이해하고 주의해서 사용해야 합니다.

우리나라에서는 발생한 라이선스 위반 사례로는 한글과 컴퓨터와 아티펙스간에 발생한 
오픈소스 무단도용관련 분쟁소송으로 자신들이 공개한 오픈소스인 ' 고스트스크립트’(PDF 관련 기술)를 
무단도용에 대해 합의금 205만 달러(약24억원)로 합의하며, 소송이 취하되는 사건이 있었습니다.


이 예시를 통해 라이선스 문제의 심각성을 확인할 수 있습니다.



그럼 어떤 오픈소스를 사용해야 할까요?

현재의 오픈소스는 매우 다양한 분야에 방대하게 존재하고 있습니다.
초창기 오픈소스 확장에 불씨를 당겼으며 현재까지 널리 사용되는 OS인 리눅스부터
최근 전문 개발자 이외에도 많은 사람이 코딩을 손쉽게 사용할 수 있게 해준 프로그래밍 언어인 파이썬까지 첨자 분야와 범위를 확장하고 있습니다.

그 중에서 유명하고 흥미로운 몇가지 오픈소스 프로젝트를 소개해 드리겠습니다.
이 오픈소스를 사용할 때는 무료이지만, 소스 코드 수정시에는 저작권과 라이선스를 명시해야합니다.



Visual Studio Code

 * Eloctron기반의 Micorosoft의 오픈 소스 프로젝트인 코드 에디터입니다. 가볍고, 다양한 환경에서 사용이 가능합니다. ( *Node.js의 HTML, JS, CSS인 웹언어로 데스크톱 프로그램 제작 플랫폼 ) 오픈소스 프로젝트답게 많은 개발자들이 Visual Studio Code의 플러그인을 제작하였으며 이를 활용해 다양한 언어와 분야에서 IDE로 사용이 가능해 Stack Overflow의 Developer Survey Results 2019의 결과에서 Most Popular Development Environments 부분 50.7%로 압도적인 1위를 차지할만큼 인기있는 개발 도구가 되었습니다. 사실 오픈소스에 조금이라도 관심이 있으시면 의아 하실겁니다. 원래 오픈소스 운동이 일어나던 초창기에는 MS가 오픈소스 진영과 대척점에 있었죠, 하지만 MS는 최근 안드로이드 OS 성장 등의 오픈소스 동향을 보며 완전히 노선을 변경하였습니다. 최근 Github을 인수해 유료 기능이었던 것을 개인 개발자들에게 무료로 제공했으며, 올해는 NPM을 인수하였고 실패하였지만 Docker도 인수하려는 등의 행보를 보이며 오픈소스에 지대한 관심을 보이고 있습니다. 이처럼 오픈소스에 회의적이었던 MS조차 오픈소스를 적극 활용하고 있으니 앞으로 오픈소스를 활용하는 기술이 필수라고 볼 수 있습니다.




TOAST UI 시리즈



NHN가 자사 클라우드 서비스인 TOAST에 서비스를 제공하며 웹페이지의 UI를 개선하기 위해 개발한 툴입니다. 편리하고 쉽게 UI를 구성할 수 있으며 준수한 퀄리티의 디자인을 제공합니다. TOAST UI의 경우 하나의 프로젝트가 아닌 시리즈로 Chart, Editor, Grid, Calendar, Image-editor를 제공하며 추가적으로 UI를 구성하는데 편리할만한 Components도 제공하고 있습니다.



<<  TOAST Chart  >>

<< TOAST Component Rolling >>





fzf ( command-line fuzzy finder )



앞서 대기업들의 오픈소스 프로젝트 위주로 소개했지만 fzf는 평소 vim의 확장 프로그램 개발로 유명한 개인 개발자가 시작한 오픈소스 프로젝트로 세계적으로 많은 관심을 받고 있습니다. (Github의 2만 9천개의 스타를 받았으며, 대략 300위권) fzf는 커맨드라인 검색 툴로 유닉스, 리눅스 등의 시스템에서 대충 생각 나는 조건들로 검색해도 원하는 결과를 빠르게 찾을 수 있는 검색 툴입니다. Go를 이용해서 제작되었으며 파일의 인덱싱과 동시에 결과 필터링으로 빠른 검색속도 자랑합니다.


<<  fzf를 이용한 검색 예시  >>


오픈소스에 대한 개념과 주의 사항을 알게 되었다면 직접 참여해보며 익히는 것이 가장 좋습니다.
오픈소스 프로젝트 참여는 개발자에게 도움이 되고 커뮤니티에 도움되는 모든 행위가 오픈소스에 기여하는 일이기 때문에 오픈소스에 당장 코드의 오류를 찾아내어 수정할 수 있다면 좋겠지만 어렵다면 간단한 것부터 시작해도 됩니다. 오픈소스는 누구나 참여할 수 있고 다양한 코드와 숙련된 개발자의 정제된 코드를 볼 수 있고, 프로젝트의 규칙을 따르며 실제 현장에서 협업하는 방식에 대해 배울 수 있어 개발자에게 많은 도움이 됩니다. 하지만 막상 오픈소스를 참여하려고 해도 방안을 모르기 때문에 어렵다고 여기기 쉽습니다. 참여에 어려움을 느낄 신입 개발자도 참여할 수 있을만한 방안을 소개해드리겠습니다.



1. 오픈소스 프로젝트의 커뮤니티 선택 * 관심 분야와 관심 언어의 조합을 검색해 선택합니다. * 현재 활발히 개발 중인 오픈소스를 선택하는 것을 추천합니다. 2. 오픈소스 프로젝트의 문서 접하기 * 해당 프로젝트의 기능과 목표를 접하며 익숙해지도록 시도합니다. * 실제 코드 수정이 어렵다면 사용해보며 문서화 작업에 기여하는 방법도 가능합니다.

3. 해당 오픈소스 프로젝트 사용해보기 * 사용하며 발생한 오류를 제보합니다. * 문서화 작업에 참여 (번역, 기능 정리 등)합니다. * 코드의 줄바꿈, 들여쓰기, 오타 수정, 주석 등을 깔끔하게 수정해서 코드를 반영시킵니다. 이상으로 오픈소스에 대한 이해에 도움이 되었길바라며, 이 글을 계기로 앞으로 많은 분들이

오픈소스의 도입과 참여에 대해 적극적으로 시도해 보셨으면 좋겠습니다.








참고자료

* 오픈 소스 개념 및 전반적인 설명 : https://www.slideshare.net/ifkakao/ss-11314556 * OLIS - 라이선스 비교표 : https://olis.or.kr/license/compareGuide.do * 공개SW활용/클라우드: https://www.oss.kr/oss_use?use_field_id=152&use_field_id=152 * 오픈소스 프로젝트 - Visual Stduio Code : https://vscodium.com - Toast UI > chart : https://github.com/nhn/tui.chart > rolling : https://github.com/nhn/tui.rolling - fzf : https://github.com/junegunn/fzf#examples