Python Library/오픈 소스 프로그래밍

[오픈 소스 프로그래밍] OSS (Open Source Software)

바보1 2022. 4. 18. 16:21

1. 오픈 소스란?

 

일반적인 정의 : 누구나 쉽게 배포할 수 있고, 변형할 수 있는 소스코드가 있는 소프트웨어

 

이때 소스코드는 저작권 소유자가 사용자에게 권한을 부여하는 라이선스를 통해 연구, 변형, 배포를 할 수 있습니다.

즉, 누구도 오픈 소스에 대한 독점적인 권한을 가질 수 없고, 특허나 저작권을 얻을 수 없습니다.

 

1.1 Free Software

 

OSS는 free software과 유사하며, 더 넓은 의미의 free and open-source software입니다.

이때 Free software는 다음과 같은 특징을 가지고 있습니다.

  • 소프트웨어에 대한 실행, 복제, 배포, 연구, 변형, 성능 향상이 자유
  • 어떤 목적이든 프로그램을 실행할 수 있다.
  • 프로그램이 어떻게 작동되는지 연구할 수 있고, 이를 필요한 곳에 적용할 수 있다.
  • 복제한 것을 재배포함으로써 타인을 도울 수 있다.
  • 프로그램 성능을 향상시킬 수 있고, 이를 출시할 수 있다.

Free라는 말이 특히나 사업가나 기업에게는 부정적일 수 있으나, free는 공짜가 아니라 '자유'라는 의미입니다.

 

1.2 소프트웨어의 다양한 카테고리

 

  • Freeware
    • 소프트웨어에 어떤 저작권도 부여할 수 없음
  • Shareware
    • 무료로 제공되지만, 계속 사용하기 위해서는 값을 지불해야 함
  • Proprietary Software
    • non-Free Software
  • Public domain Software
    • 저작권이 없음
    • 소유권이 없음

아래의 그림과 같습니다.

자유롭게 다운로드할 수 있는 소프트웨어에는 shareware, freeware, public domain software(with source)가 있고,

free software에는 freeware, public domain software(with source)가 있습니다.

proprietary software, public domain software(without source), shareware는 소유권이 있습니다.

 


2. 오픈 소스 라이선스

 

 

라이선스에는 크게 두 가지 타입이 있습니다.

  • Copylefted
  • Non-Copylefted

 

2.1 Copylefted

 

  • 만약 누군가가 free software를 non-free software로 변환하는 것을 어떻게 막나요?

 

copylefted는 이를 방지하는 데 사용됩니다.

  • 소프트웨어를 저작권으로 보호하고, 특정 배포 제한을 두어 non-free로 변환되는 것을 막습니다.
  • 변경 여부에 관계없이 소프트웨어를 재배포하는 사람은 누구든지 복사, 변경할 수 있는 자유를 양도해야 합니다.
  • 모든 유저에게 자유가 있음을 보장합니다.
    • 예) GNU (GNU is Not UNIX) General Public License (GPL) - free software and copyleft license
    • 리눅스는 GNU, GPL 라이선스 하에 배포되었습니다.
  • 만약에 수정하고 배포한다면, 수정된 코드도 오픈해야 합니다.

물론 copylefted 라이선스하에 가능한 이야기입니다.

복제했는데 아무런 라이센스 없이 다시 배포하면 이는 위법입니다.

 

 

2.2 Non-Copylefted

 

copylefted가 너무나도 자유롭기 때문에 이에 제한을 조금 둔 Non-Copylefted 라이선스도 생겼습니다.

 

  • GPL(Copylefted) 보다 훨씬 순화된 라이선스 - 이때 순화는 심각하게 자유로운 copylefted를 조금 규제한다는 의미
  • 재배포 및 수정 권한
  • 추가 배포 및 수정에 대한 추가 제한을 추가할 수 있는 권한
  • 이것은 누군가가 소프트웨어의 수정 유무와 관계 없이 독점으로 만드는 것이 가능하다는 것을 의미합니다.
    • 예) X11 license, BSD license, Apaceh license

 

 

이렇게 두 가지 대표 유형이 있습니다.

오픈 소스 라이선스 중 몇몇 예시는 GNU General Public License (GPL), GNU Library or 'Lesser' General Public License (LGPL)입니다.

LGPL은 소스코드를 다 공개하는 것은 너무 부담스럽고, 라이브러리와 모듈로 허용한다는 라이선스입니다.

 

아무튼 이러한 라이선스들의 README에 들어가면 원작자의 정보 등이 나와있습니다.

 

쉽게 표로 정리해보겠습니다.

 

  copyleft non-copyleft
의무사항 GPL3 EPL MPL Apache MIT BSD
복제, 배포, 수정 권한 허용 O O O O O O
배포 시 라이센스 사본 첨부 O O O O O  
저작권 고지사항 유지 O O O O O O
동일 라이센스로만 배포 O O O      
수정 시 수정 내용 고지 O O O      
명시적 특허 라이센스 허용 O O O O    
특허소송 제기 시 라이센스 종료 O O O O    

쉽게 이해가 되시죠?

 

non-copyleft는 copyleft보다 조금 더 개인의 권한을 지켜줍니다.

 


3. OSS의 역사

 

 

GNU Project가 OSS의 역사의 시작입니다.

GNU는 Gnu's Not Unix라는 의미이며, 목표는 not free 소프트웨어를 사용하지 않고 free software를 만드는 것입니다.

이는 FSF 재단에 의해 시작되었습니다.

 

첫 번째 프로젝트는 Unix OS를 복제하는 것이었습니다. 그렇게 함으로써 free version of UNIX OS를 만드는 것입니다.

Linux는 GNU의 일부분으로써 커널의 한 부분을 담당하는 프로그램입니다.

Linux와 GNU가 합침으로써 GNU 시스템은 완전한 OS의 모습을 갖추었고, 이를 바탕으로 ubuntu, debian 등 GNU에 기반한 많은 소프트웨어가 생겼습니다.

 

이후 인터넷이 발달하면서 Linux OS/Apache Web Server가 주류로 발달했습니다.

 


4. OSS의 개발

 

 

  • 일반적인 프로젝트 관리 기구 없이 수십, 수백 명의 개발자의 작업을 어떻게 조직화할 수 있나요?
  • 빈약한 소통과 최소한의 계획으로 널리 분산된 개발자의 개별적인 작업에서 유용하고 잘 설계된 제품이 어떻게 나올까요?

 

따라서 OSS의 개발은 다음과 같은 방법을 따릅니다.

  • 몇몇과 불편한 점에 대한 토론
  • 코드 개발 시작
  • 웹사이트 생성 및 알림
  • 커뮤니티 진화
  • 기능의 추가
  • 피드백 및 커뮤니케이션의 흐름

 

좌측이 사용자의 입장, 중간은 커뮤니티의 입장, 우측은 개발자의 입장입니다.

 

4.1 커뮤니티의 활성화

 

점점 시간이 지날수록 오픈소스와 인터넷의 발전으로 오픈소스의 온라인 커뮤니티가 활성화되었습니다.

 

대표적인 소스 공유 도구는 Git, Google Code, GitHub가 있고,

버그 리포팅 및 의사소통을 위한 도구로는 Ubuntu Launchpad가 있습니다.

 

이러한 커뮤니티의 장점은 다음과 같습니다.

  • 개인
    • 타인의 소스 이해를 통한 지식 습득
    • 정보의 교류
    • 마음에 맞는 동료 찾기
    • 취업 / 이직
  • 기업
    • 개발 기간 단축
    • 공개 리포팅을 통한 빠른 버그 해결
    • 대기업의 경우 특정 오픈소스에 적극 참가하여 기업의 발전 방향과 동반하려는 움직임

 

커뮤니티의 특징으로는

 

많은 사람이 모이는 공간인만큼 규칙이 있어야 합니다.

명확한 코딩 규칙이 필수이고, 서로 규칙을 맞추어야 혼란이 적어집니다.

글로벌 IT 기업에서도 공백 문자 개수 등까지도 정확하게 정해 개발자들 간 코딩 스타일을 통일합니다.

 

또한 코딩과 같이 표현하는 문서화 + 자세한 설명을 통해 문서 형식보다는 효율성을 중시합니다.

rst문법을 이용하여 문서 내용을 텍스트로 기록해서 손쉽게 HTML, PDF, eBook 등으로 쉽게 변환이 가능합니다.

또한 API에 대한 매뉴얼 자동 생성 및 테스트도 할 수 있습니다.

 

또한 오픈소스에 대한 버그 리포팅으로 다양한 사용자에 의한 직접적인 소프트웨어 테스트, 검증이 가능합니다.

사용자 입장으로써 오픈소스를 사용하면서 불편한 점에 대한 버그 리포트도 올릴 수 있습니다.

 

하지만 이렇게 널리 쓰이는 오픈소스의 단점 중 하나는 어떠한 큰 오류가 발생한다면, 이 오픈소스를 사용하는 모든 소프트웨어가 오류가 생긴다는 점입니다.

대표적인 예로 얼마 전에 발생한 Log4j 사건이 있습니다.

다른 프로그램과의 의존성이 있는 코드가 많아서 패치가 어렵다는 단점이 있습니다.

 

감사합니다.

 

 

지적 환영합니다.