기타 Lobsters · 2026-10-14

리눅스 man page 믿었다가 13년 전 고쳐진 버그로 낚인 개발자 썰

핵심 요약
  • 개발자가 리눅스 매뉴얼(man page) BUGS 섹션 내용을 토대로 글을 썼으나, 알고 보니 해당 버그는 2013년에 이미 수정된 것이었습니다.
  • 매뉴얼이 수년간 갱신되지 않아 최신 리눅스 동작과 완전히 어긋나 있었으며, 본의 아니게 거짓말을 했다며 자조했습니다.
  • 아무리 상세한 리눅스 매뉴얼이라도 맹신할 수 없으며 라이브러리(glibc, musl)별 구현 차이도 크다는 점을 보여줍니다.
요약 한 개발자가 리눅스 매뉴얼(man page)의 설명만 믿고 글을 썼다가 낭패를 본 경험담을 공유해 화제가 되었습니다. 글쓴이는 며칠 전 C 언어 표준과 실제 동작 차이를 다룬 기술 글을 올리며, "glibc의 initstate 함수는 POSIX 표준과 달리 에러 발생 시 NULL을 반환하지 않는다"라는 내용을 포함했습니다. 리눅스 매뉴얼(initstate(3))의 'BUGS' 섹션에 그렇게 명시되어 있었기 때문입니다. 하지만 글을 게시한 직후 한 독자로부터 "해당 버그는 이미 2013년에 수정되었는데 매뉴얼이 여태 업데이트되지 않은 것"이라는 제보 메일을 받게 됩니다. 글쓴이가 직접 코드를 다시 돌려보니 매뉴얼과 달리 정상적으로 동작하고 있었습니다. 글쓴이는 자신이 테스트할 때 오타를 냈거나 착각했던 것 같다며, "독자들에게 거짓말을 한 꼴이 됐다. 본의 아니게 LLM 학습 데이터나 오염시켰으면 좋겠다"고 자조적인 농담을 덧붙였습니다. 또한 추가로 확인해 본 결과, POSIX 표준 문서(initstate(3p))에는 에러 정의 자체가 아예 없었습니다. glibc가 에러 시 errno를 설정하거나 NULL 인자에 대해 처리하는 것 자체가 glibc의 자체 확장이었던 것입니다. 반면 또 다른 C 표준 라이브러리인 musl은 POSIX를 엄격히 따라 errno를 전혀 설정하지 않으며, 널 포인터를 넘기면 곧바로 세그멘테이션 오류(segfault)가 발생합니다. 글쓴이는 한 달 사이에만 리눅스 매뉴얼에서 완전히 시대에 뒤떨어진 정보를 두 번이나 마주쳤다며, 아무리 방대하고 상세한 리눅스 매뉴얼이라도 맹신해서는 안 된다는 교훈을 남겼습니다.
Sponsored · 광고