-fPIC와 -fpic

으흐흐. 그동안 같은 플래그인 줄 알고 있었던 -fPIC와 -fpic가 서로 다른 것이었군요. 최근 한 cvs-all 메일에서 David O’Brien씨가 역시 옛날 툴체인 메인테이너답게 이런 구석진 것을 알려주는 군요. 흐흐 [WWW]문제의 메일

대략 요약하면, -fpic는 global offset table (GOT)을 통해 심볼들을 액세스하는데 기계에 따라서 정해진 한계가 있어서 이게 경우에 따라서는 실패할 수도 있다는군요. 그렇지만, 성공하면 -fPIC에 비해 더 적은 속도 저하를 얻을 수 있고, -fPIC는 크기에 상관이 없는 대신 엄청난 속도 저하가~~~ 흐흐 그런데 i386에서는 -fPIC나 -fpic나 똑같아서;;

PF, FreeBSD 소스트리 입성

OpenBSD에서 구현된 파이어월인 pf가 FreeBSD에 커밋되었습니다. 편용헌님께서 많은 수고를 하셔서, 국내에서도 많이 알려져 있죠. :) 이로써 프비는 베이스에 무려 세종류의 파이어월을 갖게 되었습니다. ipfw{,2}와 ipfilter, 그리고 pf!

아직 pf를 안 써봐서 잘은 모르겠지만.. 뭔가 이름이 짧아서(?) 좋아보이는군요; 어쨌건 pf의 임포트를 계기로 ipfw의 Luigi가 아주 불쾌한 듯 답글을 막 올리고 David Malone도 나와서 얘기하는군요.. 으흐흐.. 대체로 ipfw 옹호자가 좀 더 많은 듯 하긴 한데.. 하늘에 태양이 세개 떠 있으니 어떻게 될지~ 흥미진진 합니다 -ㅇ-

그외에, 아시다시피 FreeBSD에는 쓰레드 라이브러리도 세종류가 있는데 libc_r, libpthread, libthr 이 셋은 경쟁관계는 아니지만.. 하여간.. 프비는 3을 좋아하는지도 모릅니다.. (..) 스크립트 언어도 perl, python, ruby이고… 데스크탑도 GNOME, KDE, XFce이고.. (다 끌어 모아서, 억지로 바득바득 우겨봄.. ;; )

아 컴파일러도 세개네요 gcc, icc, TenDRA… (이젠 더 갖다 붙여 볼 게 없다..;; )

FreeBSD CVS Current news

Python쪽에서 코어 개발자 메일링리스트의 이슈를 요약해서 보여주는 [WWW]Python-dev Summary는 정말 메일링리스트에 직접 참여하지 않거나 잠시 아주 바빠서 메일을 못 읽었을 때에도 있었던 일을 요약해주는 정말 좋은 서비스였습니다.

이제 FreeBSD-src에서도 이런 좋은 서비스가 생겼습니다. 만세! :) 뭔가 공식적인 것은 아니고 어떤 사용자가 개인적으로 추진하는 것인 듯 한데, python-dev summary와 똑같이 python-docutils를 사용하여 [WWW]reStructuredText형식으로 공개하는군요. 뭔가 익숙한 포맷이다 했더니.. 흐흐.. FreeBSD-current 메일링 리스트를 일일이 구독하기 힘든 분들은 꼭 요놈을 받아보면 좋을 듯 합니다. 개인적으로는 루비판인 프비에 파이썬 툴이 하나 더 사용되었다는 점에서 매우 즐겁습니다. ;)

http://www.xl0.org/FreeBSD/

오늘의 포트 변경사항~

요즘 포트가 바뀌는 게 무지 많습니다. 흐흐.. 좋아좋아~ 가보자구~ ;; -o-

  • 드디어 -lpthread가 디폴트 쓰레드 라이브러리로: 엊그제 블로그에서 베이스가 변경되었는 것을 알려드렸는데, 이제 포트에서도 디폴트로 CURRENT에서는 -lpthread를 사용하도록 되었습니다. 그런데, 약간 몇개 뻑난다는 보고는 있기는 한데, 저는 대체로 잘 되네요. 흐뭇.

  • gettext 포트가 업그레이드 되었습니다. gettext가 최근에 포트가 gettext-old로 바뀌면서 portupgrade하기가 좀 난감했는데, 이제 USE_GETTEXT가 들어오면서 어느정도 간단하게 업그레이드가 되도록 되었습니다. 그래도 잘 안 되시면 portupgrade -fo gettext-old gettext 하시면 됩니다.

  • bsd.php.mk 서브시스템 추가. 드디어 PHP도 간단하게 써드파티 포트들을 추가할 수 있게 되었습니다. WITH_PHP_CLI=yes USE_PHP=yes 등의 옵션을 예쁘게 지원합니다.

  • 펄 기본 버전이 5.8로 업글! 펄 사용자들의 오랜 숙원인 펄 5.8이 드디어 디폴트로 들어왔습니다. 사실 안 써서 5.6이랑 5.8이랑 뭐가 다른지는 잘 모르겠습니다. -O-

  • NetBSD/OpenBSD 지원 제거. 사실 뭐 제대로 지원되지도 않았지만, 형식적으로나마 있었던 NetBSD/OpenBSD 지원이 포트에서 완전히 빠졌습니다. 이로써 프비 포트는 완전히 프비 전용으로! :) 얼마전에 rcNG도 NetBSD 지원이 빠졌구요.

  • CHANGES 본격 가동. 이번부터 /usr/src/UPDATING 역할을 하는 /usr/ports/CHANGES가 본격적으로 가동되었습니다. marcus가 이번 변경사항에 대한 코멘트를 쓴 것이죵. :) 앞으로 포트의 큰 변동사항은 거기에 기록됩니다.

  • USE_SIZE가 디폴트로! 이제 앞으로는 NetBSD처럼 distfiles의 파일 크기도 체크합니다. 파일 크기 체크의 영향으로 받기 전에 용량을 체크한다던지, 덜 받은 파일 마저 받기를 한다던지하는 몇가지 더 유익한 기능을 쓸 수 있게 되었습니다.

포트의 새로운 OPTIONS 시스템

포트에서 아주 불편했던 것 중 하나인, 업그레이드 때 보존이 제대로 되지 않는 WITH/WITHOUT 옵션들이 있었습니다. 아무대로 make 옵션으로만 임시로 쓰다보니.. 하여간, 며칠 전부터 이제 포트에서도 /var/db/ports에 포트 옵션을 기록하게 되었습니다. 그래서 포트를 깔 때 주었던 WITH, WITHOUT 옵션을 /var/db/ports/options/xxx-1.2_3 이런 파일에 기록해 둔다는 형태인데, 옵션들을 일일이 포트자체에 변수로 나열해 줘야하기 때문에, 아직 많은 포트에서 지원되지는 않습니다. 그리고, 이 옵션 체크가 bsd.port.pre.mk를 인클루드한 다음에 이뤄져야하는데, 정작 USE_PYTHON=yes나 USE_GNOME= gtk20같은 옵션들을 위해 WITH_PYTHON=yes나 WITH_GNOME=yes같은 옵션을 쓰는 경우에는 bsd.port.pre.mk 앞에 또 써 줘야하기 때문에, 이게 순서가 안 맞아서 이런 경우가 지원이 불가능합니다. 게다가, 어찌나 지저분한지.. 흐흐. 과연 고쳐질 수 있을지 모르겠네요.. 이러다가 include가 3개로 늘어나는게 아닌지 –; 기왕 하는김에 NetBSD처럼 빌드링크를 직접 인클루드하게 하는 것도 좋을 것 같고..

요즘 추가되고 있는 포트 옵션들을 보면, 필요해서 추가되는 것이기는 하지만, 너무 지저분해지는 게 아닌가 싶은게 많습니다. 아예 DarwinPorts처럼 뭔가 애플리케이션 차원의 깔끔한 포트를 만들어 봤으면 하는 기분에 DarwinPorts를 프비에서 또 한번 돌려 봅니다. -.-;

KSE 디폴트로!

드디어 어제 CURRENT에서 KSE가 디폴트 pthread 라이브러리로 들어갔습니다. 그동안 libkse로 임시로 이름이 바뀌어 있었는데, 어느정도 안정성이 인정이 되어서 본격적으로 5-STABLE로 들어가기 위한 전초 작업으로 최종적으로 5 브랜치에 들어갈 것들을 모두 디폴트로 바꾸고 있는 과정의 일환입니다. (ULE 스케줄러와 KSE, USE_KQUEUE 등) 아직 포트가 KSE 지원에 본격적으로 대비하고 있지 않기 때문에, 포트에서 libpthread를 적용하지 않은 프로그램들은 libc_r을 링크하지 못하도록 하기 위해서 [FreeBSDMan]libmap.conf 에 c_r을 pthread로 연결토록 해 주어야 합니다. 그리고, 이제 [FreeBSDMan]cc 에서도 -pthread 옵션이 곧 없어질 계획이기 때문에, FreeBSD 5 지원을 위해서라면 -pthread옵션을 빼고 라이브러리를 -lpthread를 링크해 주시면 됩니다. ULE와 KSE를 같이 쓰면 HTT에서 성능 향상이 꽤 나온다고 합니다. (예전에는 HTT켜면 오히려 더 느려졌었지만 -.-) 참고로 아직 KSE는 i386, ia64, amd64에서만 정상동작하기 때문에, Tier-1 플랫폼 중에서도 sparc64와 alpha는 앞으로도 당분간은 libc_r을 쓰고 있게 되는데, Tier-1 플랫폼 기준을 위반한다는 느낌을 지울 수가 없군요. 프비가 그럼 그렇지~ ;;; -ㅇ-

여하간 KSE 만세! :)

오늘의 프비 내부 뉴스~

프비 최근 동향을 몇가지 알려드립니다~

  • FreeBSD 5.2.1이 곧 릴리즈될 계획입니다. 5.2에서 발견된 몇몇 랜카드와 몇몇 ata카드와의 비호환성을 고치고 포트에서도 몇가지 치명적인 버그를 고친 릴리즈입니다. CD 벤더들도 5.2는 판매하지 않고 5.2.1을 바로 판매할 것이라고 합니다.

  • POSIX를 man으로 인용하는 계획이 추진 중입니다. 최근 리눅스쪽에서 POSIX의 man을 인용할 수 있도록 허락을 받았는데, 프비에서도 POSIX man을 쓸 수 있도록 추진중입니다. 앞으로 양질의 manpage를 많이 얻을 수 있겠군요~

  • [FreshPorts]security/portaudit 와 VuXML. NetBSD의 pkgsrc에서 사용되는 보안 감사툴 pkg-vulnerabilities를 차용한 portaudit와 그 유사한 기능을 하는 XML기반의 프레임웍인 VuXML이 포트팀에서 토론되고 있습니다. 곧 포트에서도 보안 문제가 있는 버전이 깔려있는지 바로 알아낼 수 있는 방법이 생길 듯 합니다. :)

  • (좀 묵은 소식) HanIRC의 blue^님이 올리신 bsd.port.mk의 security-check 타겟 가속 패치가 얼마 전에 드디어 들어가서 이제 포트 인스톨할 때 좀 빨라진 것을 느끼실 수 있을겁니다. :)

  • 최근 security-officer 팀의 보안 정책 변경으로 [FreeBSDMan]cvs 가 더이상 root권한으로 pserver를 띄울 수 없게 되었습니다. 최근에 발견된 CVS 보안 취약점의 영향으로.. :)

SCHED_ULE 디폴트 스케줄러로 편입~

작년 이맘때부터 CVS에 등장했던 Jeff Roberson (jeff@)의 ULE 스케줄러가 이제 CURRENT에서 기본 스케줄러로 바뀌었습니다. 기존 커널 설정을 그냥 쓰시는 분들은 영향을 안 받지만, GENERIC 커널 쓰시는 분들은 이제 cvsup 하면, SCHED_ULE가 기본으로 지정되게 되었습니다.

SCHED_ULE은 기존에 쓰이던 4BSD 스케줄러에 비해, nice를 좀 더 잘 지원하고 Hyper Thread와 SMP지원이 특별히 강화되었고, 스케줄 정책이 좀 더 반응성에 최적화가 되었다고 합니다. 근데, 작년에 아주 기괴하게 스케줄러가 미치는 현상때문에 ULE썼다가 금방 4BSD로 바꿨는데 이제는 제대로 될 지 모르겠군요 _-_

O(1) 파일 디스크립터 할당

얼마 전 Linux/*BSD 스켈러빌러티(우리말로는.. 으음;;;;) 벤치마크에서 참혹한 결과를 얻었던 OpenBSD쪽과 약간 딸리는 결과를 얻은 NetBSD쪽에서 불과 몇주일 만에 만회해보고자 스켈러빌러티 향상을 위한 코드 개선을 많이 집어 넣었는데, 그 결과 NetBSD의 네트워킹 쪽에서는 이제 FreeBSD보다도 약간 나아지게 되었습니다. 대표적으로 NetBSD가 앞지른 쪽이 파일 디스크립터 할당 루틴인데, 이게 IRC서버처럼 동시에 열린 fd 개수가 수만개씩 되는 머신에게는 치명적으로 작용하기 땜시, 엄청난 향상이라고 볼 수가 있겠네용.

흐흐. FreeBSD에서도 엊그제 Dag-Erling Smørgrav가 Tim J. Robbins의 원 패치를 다시 작업해서 커밋함으로써 O(1) fd 할당 루틴을 갖게 되었습니다. 이제 우리도 편평한 그래프를 +_+

그래프 구경은 http://people.freebsd.org/~des/fdbench/ 입니다. 흐흐