살군의 보조기억 장치

Another memory device…

첫번째 커밋 closed

with one comment

처음으로 한 커밋이 closed 됐다. 아쉽지만 merged 되진 않았고, 내가 닫았다. 내가 한 커밋을 할당받은 담당자가 그대로 놔두자라고 한 것이 제일 크고, 그 이유가 binary compatibility 때문이였다. binary compatibility이진 호환성 문제는 아무래도 major 버전 변환이 일어나기 전에 이제 정리되는 버전에서 중요하지도 않은 기능 때문에 호환성을 깨면서까지 바꾸기엔 의미가 없었던 듯 하다. 내가 봐도 맞는 이야기이고. 일단 전체 프로세스를 한번 거쳤다는 것에 의의를 둬야 되겠다.

그리고 나도 잘 몰랐던 binary compatibility 란 것에 대하 찾아봤다. 깊게 들어가면 플랫폼이나 os 에 따라 요구사항도 다르고 내가 지금 이걸 확인할 사항은 아니므로, 이 정도면 대충 감을 잡겠다 싶은 정도까지만 알아보자. 우선 정의를 보면,

Definition

A library is binary compatible, if a program linked dynamically to a former version of the library continues running with newer versions of the library without the need to recompile.
If a program needs to be recompiled to run with a new version of library but doesn’t require any further modifications, the library is source compatible.

Binary compatibility saves a lot of trouble. It makes it much easier to distribute software for a certain platform. Without ensuring binary compatibility between releases, people will be forced to provide statically linked binaries. Static binaries are bad because they

  • waste resources (especially memory)
  • don’t allow the program to benefit from bugfixes or extensions in the libraries

In the KDE project, we will provide binary compatibility within the life-span of a major release for the core libraries (kdelibs, kdepimlibs).

새로 컴파일 안하고 그대로 라이브러리를 그대로 교체해서 사용할 수 있는것이다. 조건이 대략 까다롭다. 외부 인터페이스는 전혀 건드리지 말아야 된다는 소리다. 인터페이스와 관련해서 binary compatibility 를 이야기할 때 빠지지 않는 ABI, API, interface 에 대한 내용을 살펴보면,

  • ABI – Application Binary Interface. The binary interface between systems. If a binary interface changes, both sides of the interface (the user and the implementation) must be recompiled.
  • API – Application Program Interface. The source interface between systems. If a source interface changes, code that uses that interface must be modified. API changes usually imply ABI changes.
  • Interface – A class where every method is pure virtual, and thus has no inherent implementation. An interface is merely a protocol for communication between objects.
  • Factory – Something that creates objects. In this article, we’ll use a single global function as our factory.
  • DLL Boundary – The line between code instantiated in a DLL and code in a calling process is called the DLL boundary. In some cases, code can be on both sides of the boundary: Consider an inline function in a header file that gets used in the DLL and the executable. The function is actually instantiated on both sides of the boundary. Therefore, if the inline function has a static variable, two variables will be created, one in the executable and one in the DLL, and which is used depends on whether the code in the DLL or the executable is calling the function.

물론 처음에 인용한 내용은 전반적인 binary compatibility 에 관한 이야기이고, 아래 인용한 내용은 이 가운데 windows 기반에서 binary compatibility 를 지키기 위해 고려해야 될 사항들을 정리한 것이다. 처음에 언급한 것 처럼, binary compatibility 는 플랫폼, os 등등에 따라 달라진다는 것만 생각한다면 쉽게 이해가 된다.

이 문제 때문에, 이번 커밋은 반영되지 못하고 그냥 닫혔다. 하나 배웠으니까… 다음에는 더 잘하겠지. 🙂

참고
Advertisements

Written by gomiski

2014/04/08 at 5:53 am

One Response

Subscribe to comments with RSS.

  1. opencv 까페에서 놀부라는 별명으로 활동하고 있습니다.
    항상 생각만 해오던 일인데, 국내에서 벌써 이렇게 실천을 하시는 분이 계셨네요..^^
    존경합니다. ^^
    다음버전에는 꼭 기부자 명단에 이름을 올리시길 기원합니다. ^^

    놀부

    2014/12/01 at 5:17 am


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: