설계는 처음부터 맞지 않는다. 대부분의 프로젝트는 문제를 정확히 정의하지 못한 상태에서 시작되고, 그 결과 틀린 구조 위에서 개발이 진행된다. 이 글은 Readium 개발기를 시작하기 전에, 왜 이 시리즈가 “정답”이 아니라 “설계가 무너지는 과정”을 기록하려 하는지에 대한 선언이다.
우리는 단순히 기능을 구현하는 것이 아니라, 신뢰할 수 없는 실행 환경을 견디기 위한 코드를 함께 작성하고 있다. polyfill에서 ponyfill, 그리고 그 너머까지 이어진 흐름은 JavaScript가 어떻게 불확실성 위에서 진화해왔는지를 보여준다. 이 글은 우리가 작성하는 코드의 상당 부분이 왜 기능이 아니라 ‘환경에 대한 방어’로 존재하는지를 구조적으로 풀어낸다.
리눅스에서 리다이렉션과 파이프는 단순 문법이 아니라 파일 디스크립터(fd) 연결 구조의 변경이다. 이 글에서는 dup, dup2를 통해 stdout, stderr, pipe가 어떻게 연결되고, 쉘이 실행 전에 어떤 방식으로 I/O 흐름을 재구성하는지 내부 구조 기준으로 설명한다.
Job Control은 프로세스를 실행하는 방법이 아니라, 실행 이후 상태를 어떻게 제어할 것인가에 대한 구조다. 이 글은 foreground, background, stopped 상태가 signal을 통해 어떻게 전이되는지, 그리고 jobs, fg, bg가 어떻게 하나의 제어 모델을 이루는지를 설명한다.