이번에 내친 김에... 한번 컴파일로 다양한 배포판에 적용시킬 수 있는 방법 찾음.
비법은 전통적으로 사용해온 abi 버전.
보통 debuild 라는 툴로 .deb 파일을 제작하게 되는데,
수작업으로 control 을 작성하고 dpkg-deb --build 명령으로 제작하면 abi 버전만 맞으면 우분투, 데비안 등 여러 배포판에 설치/실행 가능함.
libname.so.X.y.z 이런 식인데, libname.so.X.y.z 에서 X가 맞으면 하위 호환성이 지켜짐.
데비안 패키지 이름은 libnameX 가 되어야 함.
그러나 control 파일에 Depends: ${shlibs:Depends}, ${misc:Depends} 이런 거 넣어서 debuild 라는 툴로 .deb 파일을 제작하게 되면,
libnameX (>= 현재 설치된 버전) 이런 식으로 자동으로 control 을 만들기 때문에,
그거 때문에 호환이 안 되었던 거임.
결국 snap 같은 물건 없어도 abi 버전만 맞으면 옛날부터 호환이 되고 있음.
control 파일 작성할 때, abi 버전에서 x, y 버전만 체크하면 됨.
즉 소스코드 작성 당시에 사용하던 라이브러리의 x, y 버전보다 같거나 큼 (>= 당시 X버전.당시 Y버전) 해주면 됨.
킹자로는 롤링 업데이트니까... 버전 체크할 필요가 엄슴.
그러나 그건 이상적인 얘기고 현실에서는 버전 제한 걸어야 안전
데비안 계열에서는 라이브러리 위치, 모듈 위치를 변경해 놓으니까... 답 안나오지..
결론은 도커로 각종 패키지 만드는게 결론. 아... 허무하다...
결론 : Nix를 쓰십시오
UWP말하는줄