OSS Licenses
Computer Science/OpenSource+Git

OSS Licenses

1. Copyright And License

  - Copyright 

   : 이는 저작권으로, 창작물을 만들면 자연적으로 발생하는 권리이다. 소유자는 이러한 권리를 다른 사람에게(그들이 수정, 배포,수행할 수 있는 권리) 어떻게 행사할지에 대한 통제 권한이 존재한다.

 

 -License 

  : License는 Licensor가 Licensee에게 줄 수 있는 일종의 권한의 집합이다. 

-> Licensee는 run/modify/redistribute등의 권한을 받는 대신 반드시 지켜야 할 의무를 부여받는다 

  ex) 저작자의 크레딧 명시, 반드시 라이센스 별첨, 파생물을 배포할때 반드시 같은 라이센스 하에 배포 (GPL)

 -> 이를 지키지 않으면 권한을 박탈당할 수도 있다.

 

- 만약 소스코드에 라이센스가 없으면, 그 누구도 그 소프트웨어에 대한 권한을 갖고 있지 않다. (반드시 추가할것)

 

 

2. Copyleft licenses (free software license+share-alike license)

 - Free software 운동과 연관되어있으며, 진정한 의미의 free software라고 할 수 있다.

 : 파생물이 존재할 때, 동일 조건으로 동일 라이센스를 가지고 변경/ 배포가 가능하게 된다.

  

 1) User freedom을 보장한다 (So-called as FSD)

 : user가 자유롭게 프로그램을 사용하고, 수정, 배포할 권리를 갖게 된다. 개발자들이 user를 제한하는 것을 막기 위함이며, 모두가 저작권 틀 내에서 자유롭게 프로그램을 사용할 수 있다.

 -> Goal: preventing proprietary software : 네가지 자유 (run, study, share, modify) 중 하나라도 빠지면 X

  

 2) Share Derivative Works under same license

 : 같은 라이센스 내에서 파생물을 만들 수 있다. 즉, copyleft code는 다른 코드에 copyleft license를 전파하게 되며, 이는 free software의 전파를 장려하기 위해서이다. 다소 급진적인 내용을 담고 있다.

 

 

# Free Software VS Open Source

-> FSF: 강력한 obligation 정책을 갖고 있으며, 너도 받았으니 동일한 조건으로 다시 배포하라는 의무를 갖고 있음( 기업 입장에선 상당히 부담)

-> OSI : 그에 비해 상당히 유연한 정책을 갖고 있음. 

 

 

 # CopyLeft vs Permissive License

-> obligation의 경중을 달리한다.

 - copyleft : 권한을 부여받았으면, 동일 조건으로 다시 배포해야 하는 의무가 존재한다

 - permissive : 수정한 파생물에 다른 라이센스를 붙이거나 공개하지 않아도 허용된다. (다양한 여지를 남겨둠)

 

 

3. License Categories 

  1) Public Domain Software

-> 아예 저작권이 부여되지 않은 경우를 public domain이라고 한다. 만약 저작권자가 알려지지 않았거나, 저작권 보호 기간이 만료되었을 때 public domain이 되며, 아예 저작권론적 인식이나 보호가 존재하지 않는다. 

(license가 없어도 copyright는 자연적으로 발생하며, 대부분 보호가 된다. copyleft와 public domain 개념을 혼동하면 안된다. 그냥 저작권 자체가 존재하지 않는 무법 지대라고 생각하자.)

 

 2) General Public License (GPL)

  : 이 라이센스는 FSF 진영에서 만들어졌다.

  - GNU GPL은 대중적으로 사용된 첫번째 Copyleft License이다.

  - 유저가 재생산 혹은 수정할 수 있는 원본 코드가 반드시 제공되어야 한다. 

  - 만약 software를 재배포(수정/파생 저작물) 하려고 할때에만 코드를 공개하면 되며, 혼자만 사용하는 경우(locally use) 에는 공개 의무가 없다. 

 - free, copyleft license이며 어디까지 공개하는지 반드시 검토 대상이 된다.

 

-> 최신 버전은 GPL 3이다.

 

  # Feature of GPL

   - License propagation : 라이센스가 전파된다. 

    -만약 모듈들이 같은 실행 파일에 존재한다면, 이는 명백히 한 프로그램 안에 결합된 것이다,

   - 만약 모듈들이 서로 link되어 같은 address space를 공유한다면, 이 역시 같은 프로그램으로 간주한다.

   - 이 프로그램 내의 모든 소스들은 유저에게 공개가 되어진다. 

  

그림을 통해 license가 전체 프로그램으로 전파되는 것을 확인할 수 있다.

 

  - But, 분리되어있는 소프트웨어는 모든 소프트웨어가 GPL이 될 필요는 없다 (하지만 경계가 모호함)

  -> 만약 pipe, socket, Command-line argument와 같은 communication mechanism(DBMS connector), 또는 Linux kernel 내의 Syscall Exception(fork/exec)등으로 만들어진 프로그램은 분리된 프로그램으로 분류되어 전파가 되지 않는다. Linux Kernel 역시 GPL이지만 그 내부의 system call로 만들어진 프로그램은 예외이다.

 

# Static Linking VS Dynamic Linking

  -> 미리 만들어진 함수/라이브러리를 사용할 때 프로그램이 결합되는 방식에는 두 가지가 있다.

- Static Linking : Library가 컴파일 시에 합쳐져서 함께 컴파일된다. 같은 라이브러리를 사용해도 각각 합쳐서 컴파일된다. 이는 프로그램이 커지는 단점이 존재하고, 메모리가 비효율적이다.

- Dynamic Linking : 같은 library를 share하는 프로그램은 실행 도중에 runtime으로 공유된다. 일관성을 유지할 필요가 있다.

 

 

 3) Affero General Public License (AGPL)

 - GNU GPL에 기반한 license이며, GPL보다 더 강력한 copyleft/right 의무를 부여한다.

  - GPL 라이센스는 소프트웨어를 재배포하려는 경우에만 코드 공개 의무가 있다.

     -> 이 loophole을 악용하는 사람들이 존재한다. 예를 들어 networked application/server의 코드같은 경우, 만약 user가 remotely하게 프로그램에 접근한다면, 이 코드가 분명히 서버에서 돌아감에도 불구하고 공개 의무가 없다.

 

 - 따라서 AGPL-licensed work는  network를 통해 접근하는 user에게도 코드 접근 권한을 부여하게 된다. 

 

 

 4)  Lesser General Public License (LGPL)

  - FSF에 의해 만들어진 Weak Copyleft License를 의미한다.

  -> 좀더 타협된 실용적인 license로, program에 linking되는 라이브러리 같은건 공개 의무가 없다. GPL은 copyleft propagation으로 인해 라이브러리까지 모두 공개해야 함.

 (Non-copyLeft와 GPL/AGPL 사이의 타협점이라고 보면 됨)

 ->여기선 같은 실행 파일내의 코드만 공개하면 된다. 함께 linking되는 라이브러리는 공개하지 않아도 됨.

 

  5) Mozilla Public License (MPL)

  - non copyleft와 GPL license사이의 hybrid한 성격을 갖고 있으며, Weak copyleft license이다.

  - MPL license 하에 있는 소스코드의 변경시에는 공개가 필요하나, 다른 파일에서 추가된 작업은 다른 license적용 가능.

 

 

 # Written Offer

 : 소스코드를 어떻게 제공할 것인가?

 -> source code혹은 실행 가능한 형태로 프로그램을 복제하거나 배포할 수 있다. 해당 소스코드에 대해서 written offer를 제공해야 한다.

 

 

 # Permissive License

 - No copyleft/No reciprocal : 어떤 의무도 없이 수정을 허용하며, proprietary software와 함께 사용이 가능하다.

 - academic license(BSD ,MIT, Apache License) 이라고도 하며, 진정한 의미의 자유로운 소프트웨어이다.

 

 # Why Open Source? (even with permissive licenses)

-> 만약 community 내의 소스를 가져다 사용할때, 원 소스에 유저의 참여가 불가하다고 생각해보자. 해당 원본 소스는 매번 업데이트가 이뤄지고 있다고 가정한다. 그렇다면 매번 수정사항이 생길 때마다 업데이트된 소스를 복사해서 매번 이전에 만들어져있던 수정사항이더라도 중복해서 개발이 이뤄져야 한다. 실제로 생산적인 일은 한두가지 밖에 안되고, 이전에 이루어진 작업은 계속 반복해야 하는 일이 생긴다. 

그렇지만 만약 커뮤니티의 소스가 수정이 가능하다면, 우리 회사에서 만든 수정 사항을 그대로 다시 원 커뮤니티에 적용시켜 발전시킬 수도 있고, 이 커뮤니티에서 수정사항이 발생하면 그 소스를 회사 내의 소스에 merge시켜서 두번 일할 필요없이 생산적인 작업만 하게 된다. 따라서 기술적 부채/책임은 community 쪽에 지우고, 반복적인 작업이 사라지게 된다.

: 따라서 Open Source가 상당히 효율적인 소프트웨어라고 볼 수 있다.

 

 

Public Domain(Copyright조차 없음)->Permissive License (No copyleft/No reciprocal)->LGPL/MPL->GPL->AGPL

위 순서로 점점 더 강력한 의무의 copyleft를 부여한다고 생각하면 된다.

'Computer Science > OpenSource+Git' 카테고리의 다른 글

Git Branch Command  (0) 2021.10.24
Git Version Control Command  (0) 2021.10.24
Git Overview/ Linux Basic Command  (0) 2021.10.24
OSS Tools  (0) 2021.10.24
Open Source Overview  (0) 2021.10.23