경희대학교 이성원 교수님의 '오픈소스 SW 개발 방법 및 도구 수업'을 기반으로 본인이 이해한 바로 새롭게 정리한 글입니다.

오픈소스의 정의

오픈소스란 라이선스 방식을 통해 배포된 소스 코드를 자유롭게 복사, 수정, 사용, 재배포 할 수 있는 소프트웨어를 지칭함.

오픈소스는 누구라도 버그를 수정하거나, 코드를 개조하여 기능을 추가할 수 있으며, 소프트웨어 개발에 참여할 수 있음

오픈소스는 개발자에게 프로그램 배포 권리, 소스코드 접근 권리, 소스 코드 수정 권리를 제공함

오픈소스 선택 시 고려 사항

  • 품질

    • 기능, 성능, 호환성 등 오픈소스의 품질은 오픈소스를 선택하는데 가장 중요한 요소이다.

    • Github에 호스팅하는 프로젝트라면, Star수, Fork수로 오픈소스의 완성도를 가늠할 수 있다.

    • 오픈 소스를 사용하려는 기술 조직은 당연히 충분한 기능과, 성능 검증을 수행한 후 제품/서비스에 도입해야한다.

  • 커뮤니티

    • 커뮤니티는 오픈소스가 얼마나 많은 사용자를 보유하는지, Issue 관리는 이루어지는지, 지속적으로 업데이트를 하는 지 등 커뮤니티 활성화 여부.
  • 문서화

    • 오픈소스를 적절히 도입하고 유지보수하기 위해 프로젝트가 얼마나 문서를 충실하게 제공되는지 확인.

    • 문서화가 잘 된 프로젝트의 산출물은 기업이 도입하는데 수월.

  • 보안 취약점

    • 오픈소스 보안 취약점이 알려진 오픈소스는 사용해선 안됨.

    • 보안 취약점이 발견된 오픈소스의 버전은 CVE 등 데이터베이스에서 관리.

  • 라이선스

    • 오픈소스 라이선스는 소프트웨어를 누구나 자유롭게 사용할 수 있는 권리르 부여하는 허가증.

    • 대부분의 라이선스는 오픈소스를 재배포시 준수해야할 의무사항을 요구.

오픈소스 법적 책임

오픈소스에 대한 법적 책임과 이에 따른 위험을 제대로 숙지하지 못할 경우, 사용권리 박탈과 제품을 판매 불가할 수 있음.

오픈소스 라이선스

일반 상용소프트웨어와 마찬가지로 오픈소스에도 저작권 등 지식 재산권이 있으며, 권리자의 허락 없이 함부로 사용하면 소송을 당할 수 있다.

오픈소스 권리자들은 많은 사람들이 사용할 수 있도록, 광범위한 라이선스 부여.

오픈소스 라이선스의 주요 의무 사항

  • 저작권 표시 및 라이선스 고지

    • 개발자 또는 기여자에 관한 사항과 저작권에 관한 사항을 제품에 표시하거나, 포함하도록 요구한다.
    • 이용자들이 오픈 소스에 관한 권리를 잘 이해할 수 있도록 배포자로 하여금 해당 라이선스의 사본을 함께 첨부할 것을 요구하고 있다.
  • 소스코드 공개

    • 대표적인 GPL계열의 라이선스는 바이너리 형태로의 소프트웨어 배포를 허용하는 대신, 바이너리에 해당하는 소스코드를 함께 공개할 것을 요구한다.
  • 재배포시 동일 라이선스 적용

    • 라이선스에 따라 큰 차이를 보이는 부분은 'Copyleft'사항이다. 수정된 소프트웨어도 동일한 Lincense로 배포할 것을 요구한다.

오픈소스 라이선스 명시

  • 소스 코드 파일 상단의 주석
  • 오픈소스 소프트웨어 내 License파일
  • 오픈소스 전용 웹사이트를 통한 라이선스 공개

여러가지 오픈소스 라이선스

  • 아무조건 없이 사용할 수 있는 라이선스

    • 예시

      • Creative Commons Zero v1.0 Universal (CC0-1.0)

      • The Unlicense (Unlicense)

  • Permissive License

    • 오픈소스 라이선스의 고지 의무가 있으며, 비교적 수월하게 준수할 수 있다.

    • 예시

      • Apache License 1.1 (Apache-1.1)

      • Apache License 2.0 (Apache-2.0)

      • BSD 2-Clause "Simplified" License (BSD-2-Clause)

      • BSD 3-Clause "New" or "Revised" License (BSD-3-Clause)

      • Json License (JSON)

      • Microsoft Public License (MS-PL)

      • PostgreSQL License (PostgreSQL)

      • zlib License (zlib)

  • 주의가 필요한 Copyleft 라이선스

    • GPL(GNU General Public License)은 오픈소스 재배포 시 소스 코드 공개를 요구함.

    • Copyleft 라이선스 유형은 오픈소스 라이선스 중에 요구하는 의무사항이 가장 많은 라이선스 유형이기 때문에 주의가 필요함.

    • 소스 코드를 직접 제공하거나, 사용자가 요청시 소스 코드를 제공하겠다는 서면 약정서를 제공.

    • 예시

      • GNU General Public License v2.0 (GPL-2.0)

      • GNU General Public License v3.0 (GPL-3.0)

    • 우회방법

      • 자사 코드 분리 방법 : Copyleft라이선스 유형의 라이선스가 적용된 오픈소스는 개발자가 소속한 회사가 배포하는 제품에 포함시 주의해야한다.

      • 따라서 오픈소스는 설계 단계에서 Build시 자사 소프트웨어와 통합되지 않고 Runtime에도 독립된 프로세스로 동작하도록 한다.

  • Weak Copyleft 라이선스

    • Weak Copyleft는 Copyleft 유형의 라이선스에 비해 공개 범위가 약하다.

    • 우회방법

      • LGPL Library - Dynamic Link 사용

      • LGPL도 재배포시 소스 코드 공개를 요구함.

      • 하지만 Library형태의 LGPL하의 오픈소스를 Link형태로 결합할 경우, LGPL Library 부분만 소스 코드를 공개하면 되고, 결합하는 코드는 공개 의무가 없다.

    • 예시

      • GNU Lessor General Public License v2.0 (LGPL-2.1)

      • GNU Lessor General Public License v3.0 (GPL-3.0)

  • 사용 제한 라이선스

    • 비상업용 라이선스

      • 연구, 학습 만을 위해서라고 해도 영리 회사 내에서 사용한다면 상업적인 활동으로 간주.
    • 예시

      • Creative Commons Attribution Non Commercial 4.0 International (CC-BY-NC-4.0)
    • Network 서비스 제한 라이선스

      • Network 서비스도 배포로 간주하여 의무사항 준수를 요구.

      • Network 서비스를 제공하는 서버에 AGPL로 공개된 오픈소스가 포함되어 있을 경우, 소프트웨어를 배포하지 않아도, AGPL 오픈소스 뿐 아니란 다른 소프트웨어의 소스코드까지 공개해야함.

    • 예시

      • GNU Affero Genral Public License v3.0 (AGPL-3.0)
    • 광고 조항 포함 라이선스

      • 오픈소스의 기능,활용을 언급하는 모든 광고에 특정 문구를 포함..
  • 소스코드 제공 의무 유형

    • Work Based on the Code

      • 제공의무 : 원 저작물의 소스코드를 원본 그대로, 혹은 수정하여 새로운 SW에 포함하였을 경우

      • 제공범위 : 원 저작물의 소스코드가 포함되어, 파생 저작물로 인정되는 범위내의 모든 소스코드

    • Derivative Work

      • 제공의무 : 원 저작물의 소스코드를 수정하여 사용한 경우 제공의무가 존재하며, 수정 없이 그대로 사용하였을 경우에는 소스코드를 제공하지 않아도 됨

      • 제공범위 : 원 저작물의 사용함에 있어, 수정을 거쳤을 경우, 원 저작물의 소스코드에서 부터 존재하던 파일을 모두 공개.

    • File

      • 제공의무 : 원 저작물의 소스코드를 원본 그대로, 혹은 수정하여 새로운 SW에 포함하였을 경우.

      • 제공범위 : 원 저작물의 사용함에 있어, 수정을 거쳤을 경우, 원 저작물의 소스코드에서 부터 존재하던 파일 중 수정된 부분을 포함하는 파생 저작물을 모두 공개.

         
    • Module

      • 제공의무 : 원 저작물의 소스코드를 원본 그대로, 혹은 수정하여 새로운 SW에 포함하였을 경우.

      • 제공범위 : 원 저작물의 사용함에 있어, 수정을 거쳤을 경우, 원 저작물의 소스코드에서 부터 존재하던 파일 중 수정된 부분을 포함하는 모듈을 모두 공개.

         
    • File Derivative Work

      • 제공의무 : 원 저작물의 소스코드를 수정하여 사용한 경우 제공의무가 존재하며, 수정 없이 그대로 사용하였을 경우에는 소스코드를 제공하지 않아도 됨.

      • 제공범위 : 원 저작물의 소스코드에서부터 존재하던 파일 중 '수정된 부분을 파일 단위'로 공개.

    • Module Derivative Work

      • 제공의무 : 원 저작물의 소스코드를 수정하여 사용한 경우 제공의무가 존재하며, 수정 없이 그대로 사용하였을 경우에는 소스코드를 제공하지 않아도 됨.

      • 제공범위 : 원 저작물의 소스코드에서부터 존재하던 파일 중 '수정된 부분을 모듈 단위'로 공개.

  • 대표적인 오픈소스 라이선스

    • Apache License

      • 아파치소프트웨어재단이 본인들의 SW에 적용하기 위해 만든 라이선스
      • 소스코드 공개 의무같은 의무사항은 없지만, 아파치 라이선스 소스코드를 수정해 배포하는 경우 "아파치 라이선스 버전 2.0"을 꼭 포함시키고, 아파치 재단에서 만든 소프트웨어임을 밝혀야 함.
    • GNU(Gnu is Not Unix) General Public License(GPL)

      • 자유소프트웨어재단에서 만든 라이선스
      • 카피레프트 조항을 포함하고 있다.
      • GPL 프로그램은 어떤 목적으로, 어떤 형태로든 사용할 수 있지만 사용하거나 변경된 프로그램을 배포하는 경우 무조건 동일한 라이선스 즉, GPL로 공개.
    • GNU Affero GPL(AGPL)

      • GPL을 기반으로 만든 라이선스로 버전 1,2,는 아페로, 가장 최신버전인 3은 자유소프트웨어재단에 의해 개발.

      • 서버에서 프로그램을 실행해 다른 사용자들과 통신하면, 실행되고 있는 프로그램의 모든 소스코드를 사용자들이 다운로드 할 수 있게 해야한다는 조항을 포함.

    • GNU Lesser GPL(LGPL)

      • 좋은 자유 소프트웨어 제품이 더 많이 쓰이고, 표준이 되도록 유도하기 위해 단순한 라이브러리 모듈 링크를 허용한 라이선스.

      • 너무 강력한 철학이 담긴 GPL의 카피레프트 조항을 보완하기 위해 만든 라이선스로 자유소프트웨어를 지향하짐만 GPL이 오히려 자유소프트웨어의 철학을 훼손한다는 생각에서 나온 라이선스.

      • LGPL 라이브러리를 정적 링크하는 애플리케이션을 배포하는 경우에는 LGPL 라이브러리의 소스코드와, 애플리케이션의 오브젝트 코드도 공개해야한다.

      • LGPL 라이브러리를 동적 링크하는 애플리케이션을 배포하는 경우에는 LGPL 라이브러리의 소스코드를 공개해야한다. 하지만 애플리케이션의 오브젝트 코드도 공개할 필요는 없다.

    • Mozila Public License (MPL)

      • 모질라 공용 허가서는 과거 넷스케이프 웹브라우저의 소스코드를 공개하기 위해 개발된 라이선스.

      • MPL의 특징은 소스코드와 실행파일의 저작권을 분리했다는 부분이 있다.

    • MIT License

      • MIT에서 개발한 라이선스로, 라이선스와 저작권 관련 명시만 지켜주면 되는 라이선스이며, 가장 느슨한 조건을 가진 라이선스 중 하나이다.
    • Berkeley Software Distribution(BSD) License

      • 버클리 캘리포니아 대학에서 배포하는 공개 SW라이선스.

      • 공공기관에서 만들어낸 것으로 공익성이 강하다. 따라서 아무런 제한 없이 누구나 자신의 용도에 사용할 수 있다.

      • 라이선스 및 저작권 표시 조건 외엔 제약이 없는 굉장히 자유로운 라이선스 중 하나이다.

profile
처음이고 서툴지만 방향을 잡아 노력하는 개발자

0개의 댓글