본문 바로가기

Programing

GPL 라이선스 정리

2020. 2. 12.

 

[정보] GPL을 사용하면 내 프로그램도 GPL로 공개해야 하나??

 

2008년 9월에 Codein ( http://codein.co.kr ) 카페에 적어 두었던 글을 여기에 다시 옮겨둠.

====

안녕하세요.
 찬 입니다.

GPL를 적용한 소스코드를 사용하면, 모든것을 공개해야 하는것에 대한 의문이 있을 수 있습니다.

그래서 이번에 찾은 내용이 있는데 정리하는 겸 올려둡니다.
http://www.gnu.org/licenses/gpl-faq.ko.html

 

이 중에서 몇가지 모호했던것 정리

1. GPL 라이센스가 걸린 라이브러리를 사용하면, 내가 만든것도 GPL을 적용해야 하나?

    - GPL 라이센스가 걸린 source code의 결과물을 linking ( static, dynamic 포함 ) 하면 무조건 GPL로 해야 한다.

    - 관련 문서 : 코드를 GPL 프로그램과 링크시켜야만 제가 만들고자 하는 독점 프로그램을 만들 수 있습니다. 이것은 제가 만든 프로그램이 GPL 프로그램이 되어야 한다는 것을 의미합니까? ( http://www.gnu.org/licenses/gpl-faq.ko.html#TOCLinkingWithGPL )

 

2. GPL 라이센스가 걸린 Source를 실행파일(exe)로 만들었을때, 내 프로그램에서 fork나 exec로 수행하면, 내가 만든것도 GPL을 적용해야 하나?

    - 아니다. 실행파일(exe)을 단지 fork나 exec로 수행할때에는 plug-in 형태로 보아서, 내가 만든것은 GPL을 적용하지 않아도 된다.

    - 관련 문서 : 플러그인 (plug-in)을 사용하는 프로그램을 GPL로 공표한다고 할 때, 플러그인의 라이선스에 대한 조건이 있습니까? ( http://www.gnu.org/licenses/gpl-faq.ko.html#TOCGPLAndPlugins )

 

3. 링킹해서 사용하는 경우와 exec나 fork를 이용해서 수행하는것이 뭐가 다른가?

    - 링킹은 같은 메모리 구역을 사용하는것이고, exec나 fork는 서로 다른 메모리 영역에 사용되는것이다.

    - ``단순 집합(aggregation)''과 ``두개의 모듈을 결합하여(combine) 하나의 프로그램으로 만든다''는 의미의 차이는 무엇입니까? ( http://www.gnu.org/licenses/gpl-faq.ko.html#TOCMereAggregation )

    - 모듈들이 특정한 실행 파일 안에 함께 포함되어 있다면 이것은 명확히 하나의 프로그램으로 결합되어 있는 것

    - 파이프와 소켓, 명령행 인자 등은 두개의 독립된 프로그램간의 통신을 위해서 사용되는 매커니즘입니다. 따라서 모듈들이 이러한 형식을 사용한다면 모듈들은 독립된 프로그램으로 볼 수 있습니다.




GPL 라이센스가 걸린 소스의 결과물과 링킹을 했다고
소스를 공개해야 하는것은 아닙니다.
(위에서는 무조건 공개해야 하는것 처럼 적혀 있지요.)

Linux의 core들도 GPL로 되어 있다고 본것 같은데,
그렇다면 Linux core(API)를 사용하는것이면 모두 공개 되어야 하는게 아닌가? 라고
생각할수 있는데 OS에 밀접하게 연관되어 있는 (main component?)에 대해서는
문제가 되지 않는다고 합니다.

문제는 저기서 말하는 "main component가 어디까지인가?"이겠죠.

 

자료출처: https://blog.ggaman.com/940

 

[정보] GPL을 사용하면 내 프로그램도 GPL로 공개해야 하나??

2008년 9월에 Codein ( http://codein.co.kr ) 카페에 적어 두었던 글을 여기에 다시 옮겨둠. ==== 안녕하세요. 찬 입니다. GPL를 적용한 소스코드를 사용하면, 모든것을 공개해야 하는것에 대한 의문이 있을 수..

blog.ggaman.com

 

댓글

OpenCV 2차원 Mat을 1차원 벡터에 입력하기

2019. 12. 17.
// 2차원 Mat 생성 (signed int 자료형)
cv::Mat chkMask(cv::Size(width, height), CV_32SC1, cv::Scalar(0));

// 1차원 벡터 생성 (signed int 자료형)
vector<int> chkMaskData;

// 1차원 벡터에 2차원 Mat 버퍼 복사
chkMaskData.assign((int*)chkMask.data, (int*)chkMask.data + chkMask.total());

 

댓글

Visual Studio C++ 코드 편집기의 intelisense가 많이 느릴 때

2019. 12. 17.

Visual Studio C++ 로 오픈소스 등을 함께 이용하면서 코드를 길게 작성할 경우, 인텔리센스 반응이 점점 느려지는 현상을 발견함.

 

구글링을 통해 아래의 방법으로 속도를 향상시켰음.

 

Tools -> Options -> Text Editor -> C/C++ -> Advanced -> IntelliSense
* Disable Auto Updating = True
* Disable #include Auto Complete = True
* Max Cached Translation Units = 5 이상(2~15) (VS2015에선 설정이 안됐음)
    - 일반적으로 동시에 작업하는 소스 파일수로 설정

 

단점으로는, namespace, macro, define 등의 변수에 컬러링이 안됨

 

코드를 간결하게 잘 짜는 습관이 필요할 듯..

댓글

[OpenCV] MinAreaRect 로 생성된 RotatedRect의 특징

2019. 10. 8.

* ISSUE

  - cv::MinAreaRect로 생성된 RotatedRect의 포인트 순서와 로테이션 기준 정리 필요

 

* 결론

  1. MAR로 생성된 사각형의 시작점을 정의하는 기준은 아래와 같음

    - Y 좌표가 가장 큰 점을 시작점으로 설정함

    - Y 좌표가 동일한 점이 존재할 경우, X 좌표가 더 큰 점을 시작점으로 설정함 

  2. 시작점이 선정된 다음 2번 째 점을 정의하는 기준은 아래와 같음

    - X좌표가 가장 작은 점을 2번 째 점으로 설정함

    - X좌표가 동일한 점이 존재할 경우, Y 좌표가 더 큰 점을 시작점으로 설정함

  3. 베이스 라인 벡터는 2번점 --> 3번점을 연결한 벡터임

  4. 방향벡터와 X축 사이의 각도를 RotatedRect로 회전각으로 설정함

    - 그림 1의 경우 RotatedRect의 회전각은 -45도임

    - 그림 2의 경우 RotatedRect의 회전각은 -90도임

 

 

그림 1. 회전된 RotatedRect(녹색) 및 회전각 0도로 회전한 RotatedRect(빨강색)

 

그림 2. 직사각형태의 RotatedRect(녹색) 및 회전각 0도로 회전한 RotatedRect(빨강색)

 

 

 

 

 

 

 

댓글