위스콘신 대학교에서 운영체제를 가르치며 집필한 무료 온라인 교재 OSTEP의 제작 배경과 과정, 인쇄본과 PDF 판매, 사용 통계, Hacker News/Reddit 효과, 강의 평가에 미친 영향, 그리고 무료 온라인 도서(FOB)가 기존 교과서보다 나은 이유와 출판사의 역할에 대한 제언을 담은 글.
초록: 이 글은 무료 온라인 교재인 Operating Systems: Three Easy Pieces(약칭 OSTEP, 때로는 "오 스텝"으로 발음)의 집필 경험을 간단히(사실 그리 짧지는 않게) 정리한 것이다. 이 책은 지난 수년 동안 위스콘신 대학교 매디슨에서 학부 운영체제 과목인 CS 537을 가르치며 필자(Remzi Arpaci-Dusseau)와 아내(Andrea Arpaci-Dusseau)가 함께 개발했다. 2012년 이후 책의 각 장은 50만 회 이상 다운로드되었고, 책 홈페이지는 지난 1년 동안 약 300만 회 조회를 기록했다. 최근에는 Hacker News와 Reddit의 덕도 좀 보았다. 우리의 경험을 바탕으로, 고전적인 인쇄 교과서의 대안으로 자리 잡은 **무료 온라인 도서(FOB, Free Online Books)**의 가치를 주장한다.
교과서 출판 산업 전반, 특히 컴퓨터 과학(CS) 교과서와 관련해서는 늘 못마땅한 점이 있었다. 이유가 뭐냐고? 하나씩 세어 보자.
요약하자면 이렇다. 고전적인 인쇄 교과서는 너무 비싸고, 출판사의 불필요한 개정 강요로 중고 구매도 어렵고, CS 책들의 품질도 들쭉날쭉하다. 학생들이 원하는 건 정반대 아닐까? 바로 고품질이면서 저렴한 책. 아니면 적어도 둘 중 하나라도!
Google 이미지 검색에 “high-quality, low-cost”를 치면 이런 그림이 나온다. ecobabysteps.com의 작품. 그런데 저기선 대체 인형들한테 뭘 하고 있는 거지?
이 비싸고도 품질 낮은 문제를 처음 체감한 건 학생 때였다(주로 미시간 학부, 조금은 버클리 대학원). 그땐 선택권이 별로 없었다. 나는 수업을 듣는 것보다 읽으면서 더 잘 배우는 편이라, 가능한 모든 책을 샀고 더 배우고 싶으면 추가로 사기도 했다. 운이 좋았다. 그런 사치를 감당할 수 있는 집에서 태어났으니까.
교수가 되고 나서 문제는 더 또렷해졌다. 나는 2000년 1월부터 위스콘신에서 운영체제 과목을 가르치기 시작했고 지금까지 거의 쉬지 않고 가르치고 있다(아내도 같은 과목을 가르치며, 우리는 주로 파일·스토리지 시스템을 연구하는 연구 그룹을 공동 운영한다). 대학원 과목(CS 736)은 문제가 없다. 논문만 읽으면 되고, 다행히 대부분 웹에서 무료로 볼 수 있다. 책값 문제가 본격적으로 드러난 건 학부 운영체제 입문 과목(CS 537)이었다. 위스콘신의 컴퓨터 과학/공학 학부생 대부분이 듣는 과목이다.
초기에 여러 해 동안 수업을 가르치며(아내 Andrea와 함께) 고전 교과서들을 많이 시도해 봤다. 다들 아는 책들이다. Silberschatz, Tannenbaum, Nutt, Dietel & Dietel 등. 학생들에게 책을 사오게 하고, 우리는 필요한 주제를 강의하며 관련 장을 읽으라고 안내했다.
학생 피드백에서 한 가지 패턴을 봤다. 어떤 책을 선택하든, 대부분의 학생들은 그 책이 별로라고 불평했다. 사실, 평가서에서 가장 흔하게 본 문장은 “책은 안 봤어요. 수업에 와서 듣기만 했는데 그걸로 충분했어요.” 같은 것이었다.
물론 이 피드백에는 내가 특히 학부 수업을 점점 잘하게 된 영향도 있었다. 신임 교수로 연구 그룹을 꾸리려 할 때 학부 강의에 시간을 많이 쓰기란 쉽지 않다. 강의는 재미있지만, 연구 성과나 테뉴어에는 도움이 되지 않기 때문이다. 그래서 보통은 연구도 병행하고(중요!) 학생도 영입할 수 있는 대학원 수업에 더 집중하게 된다. 시간이 흐르고 테뉴어를 받은 뒤에는 학부 강의에도 더 시간을 들일 수 있었다. 그리고 알게 됐다. 그게 꽤 보람찬 일이라는 걸!
학생들에게 한 마디: 교수에게 주는 피드백을 조심하라 — 진짜로 귀를 기울일 수도 있으니까! 우리는 그랬다. 나는 아예 교과서를 지정하지 않기 시작했고, 그냥 수업에 와서 노트하라고만 했다. 학생들에게 유일하게 꼭 사라고 한 책은 Kernighan and Ritchie뿐. 당연하잖아.
K+R은 모두가 한 권씩 가져야 한다. 그리고 이 사진처럼 너덜너덜해야 한다.
하지만 이 선택 때문에 새로운 문제가 생겼다. 아마도 당연하게. 특히 (a) 필기 실력이 좋지 않거나 (b) 아침 기상과 친하지 않은 학생들이(대개 공손하게) 참고할 자료가 없다고 불평했다. 학생은 수업에 와서 노트해야 했고, 그 외에 의지할 자료가 없었다.
나는 이런 학생들의 의견을 진지하게 받아들였다. 개인적으로도 앞서 말했듯 “책으로 배우는” 타입이었기 때문이었을 것이다. 수업시간에 듣는 걸 별로 좋아하지 않았고, 차라리 나중에 책을 읽는 편이었다(Andrea는 내가 수업에서 자주 잤다는 얘기를 들을 때마다 놀라고, 가끔은 경악하곤 한다. 어디서 피곤한 학생이 잠을 보충하겠는가?). 학부 때 성적이 안 좋았던 과목들을 떠올려 보니 책이 나쁘거나(더 나쁘게는) 아예 책이 없는 수업이었다. 그런데 내가 왜 똑같은 상황을 내 학생들에게 만들고 있었을까? 마지막으로, 테뉴어를 지난 것도 도움이 됐다. 연구 그룹이 여전히 풀가동 중이었지만, 뭔가 추가 프로젝트를 할 시간이 조금 생겼다.
그 시간으로 내가 한 일은 글쓰기였다. 나의 시스템은 단순했다(목표보다 시스템이 낫다고들 하잖나?). 특정 주제를 강의한 뒤, 머릿속에 내용이 생생할 때 바로 내 연구실로 가서 문을 닫고, 방금 말한 걸 글로 옮겼다. 수년간 Andrea와 내가 다듬어 온 강의 덕에, 학부·초기 대학원생에게 어떻게 가르쳐야 할지 감이 있었다. 그걸 책 형태로 옮기면 됐다. 결과물이 반드시 아름답지는 않겠지만, 수업을 놓쳤거나, 들은 내용을 글로 복습하고 싶은 학생에게는 유용할 수 있다고 생각했다.
![이미지 4: [출처 http://julianrockmemorial.org/wp-content/uploads/2011/11/Baby-Typewriter.jpg]](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSPyYAObOpMdA0PErOKy3W0NuBQVxwMOUIcO8hbnPEvYjRWT3xYWJlQywx-CDoLePk1EZ8YfKAKjEySz9NRBkMf2fZwarLb82HNeuuLb5y95sPQg6W6Xl-T4I1IH7jfM-q44yEPMzTFT16/s1600/Baby-Typewriter.jpg)
이건 내가 타이핑하는 모습은 아니지만, 정말 귀엽다. 아기는 똑똑하다.
나는 진도를 보장하기 위해 몇 가지 규칙을 세웠다. 완벽이 선(善)의 적이라는 걸 알았으니까. 첫째, 그냥 플레인 텍스트로 쓴다 — 화려한 조판 따위 없음. 둘째, 그림은 그리지 않는다 — 필요하다면 그냥 ASCII 아트로. 셋째, 메모는 끝날 때까지 쓴다 — 지금 할 수 있는 걸 나중으로 미루지 않는다.
첫 시도의 결과는 여기에서 볼 수 있다. 보기 좋은 건 아니다 — 텍스트 파일 꾸러미일 뿐이다. 내가 “그린” 그림의 예는 이렇다.
0 |---------------------|
4 | program code | all the instructions
... | | live up in this part
| |
1K |---------------------|
| heap | the heap contains all
| | malloc'd (new'd) data
| | structures
2K |---------------------| [it grows downward]
| | |
| v |
| |
| |
| |
| |
| |
| free |
| |
| |
| |
| |
| |
| |
| ^ |
| | | [it grows upward]
15k |---------------------| the stack contains local
| stack | (stack-allocated) variables,
| | arguments to routines,
16k |---------------------| return variables, etc.
FIGURE: ADDRESS SPACE
이 그림은 코드, 힙, 스택을 포함한 가상 주소 공간의 개념도다. 예쁘진 않다. 멋지게 조판된 일반적인 교과서에 넣고 싶을 수준은 절대 아니다. 그래도 효과는 있었다. 학생들은 이런 조잡한 그림을 개의치 않았고, 투박한 형태의 노트를 반겼다. 연말 강의평을 지금도 기억한다. “ZOMG! 진짜 교과서 쓰셔야 해요!” 같은 말들이 더 많이 써야겠다는 의욕을 북돋웠다. 작은 긍정 피드백이 주는 약발은 강력하다.
첫 학기의 노트 쓰기를 마치고 나니 진도를 내기 쉬워졌다. 학부 운영체제 과목을 가르칠 때마다 몇 개씩 더 쓰려 했다. 어느 학기에는 마침내 몇 개의 과제를 추가하기 시작했다(버전 1.0 전에 남은 일의 대부분이 아직 몇 개 더 만드는 것이다). 곧 LaTeX으로 조판을 시작했고, 어느 순간부터 그럴싸한 책 모양이 갖춰졌다. ASCII 아트 대신 그림을 넣은 게 마지막 단계였다. 첫 버전의 "Operating Systems: Three Easy Pieces"가 태어났고, 우리 **무료 온라인 도서(FOB)**가 모두에게 공개되었다.
학생 피드백은 책의 다음 진화를 이끌었다. 한 학생이 이렇게 말했다. “이 책 정말 좋아요. 인쇄본을 살 수 있나요? 저는 종이로 읽는 걸 더 좋아하고, 제본된 책이면 꼭 살 거예요.”
사실 몇몇 출판사(이름은 생략)와 인쇄본을 내는 가능성에 대해 대화를 나눴다. 대충 이런 식이었다.
그리하여 끝.
나는 온라인 주문형 출판의 신흥 세계를 기웃거리다 lulu.com을 발견했다. 정말 멋진 사이트다. PDF를 업로드하고 몇 가지 설정(표지 같은 것)을 만지면, 짠— 주문형 인쇄로 합리적인 가격의 내 책이 판매된다.
곧 우리는 “무료” 운영체제 교과서의 하드커버와 소프트커버를 모두 만들었다. 사실상 원가로 인쇄되며(권당 약 5달러를 받는데, 그냥 소소한 동기부여 정도다), 매 학기 우리 수업에서 일부 학생들이 인쇄본을 산다.
결국 인쇄본 표지도 만들었다. 핼리 혜성의 오래된 사진을 가져다 텍스트를 얹었다. 제안해 준 T. Griebel에게 감사. 예전 검은 표지를 가진 분들께는… 미안!
흥미롭게도 Lulu에서는 PDF도 판매할 수 있어, 모든 장과 용어집, 시스템 구축 팁 등 몇 가지 보너스를 포함한 전체 PDF를 10달러에 팔기 시작했다. 놀랍게도 이게 가장 인기 있는 구매 방식이다(약 55%; 소프트커버 약 35%; 하드커버 나머지 약 10%).
간단히 말해: 온라인에서 무료여도, 어떤 사람들은 어쨌든 책을 산다. FOB로 부자가 될 수 있다! 음, 부자까지는 아니고, 사실 그 근처도 아니지만, 말하고자 하는 바는 알겠지.
무료로 책의 장들을 온라인에 올려두니 뜻밖의 좋은 효과가 생겼다. 전 세계의 사람들이 사용하기 시작했다 — 때로는 몇 개 장만(무료 책이라 가능한 새로운 사용 방식), 때로는 전체를. 미국(여러 학교), 캐나다(토론토, 워털루, 앨버타 등), 인도, 포르투갈, 터키 등지에서 전통적인 운영체제 교재 대신 OSTEP을 쓰는 수업들이 있다는 얘기를 들었다. 매주 더 많은 문의가 온다.
더 흥미로운 건, 가벼운/우연한 사용이 가능해졌다는 점이다. 누군가 다단계 피드백 큐 스케줄링, 세그멘테이션이나 페이징으로 구현한 가상 메모리, TLB가 동작하는 방식, 조건 변수나 세마포어가 무엇인지, 로컬 파일 시스템 구현 방법, 파일 시스템 저널링의 원리, 또는 Sun NFS 프로토콜의 실제 동작을 검색하다가, 우리 책을 우연히 발견할 수도 있다.
심지어 어떤 교수님들로부터, 다른 책을 쓰라고 했는데 학생들이 우리 책을 대신 보고 있더라는 가벼운 항의도 받았다. 지하 학생 네트워크의 마법!
실제 사용량은, 지난 수년간(감사! Computer Systems Lab) 장별 다운로드를 추적해 왔다.
인터넷의 힘: 언젠가는 사람들이 당신의 것을 발견할지도 모른다.
보듯, 초기 몇 년 동안은 연간 수천 건 수준이었지만, 최근 2년은 놀라운 성장을 보였다. 지난해(2013년)만 거의 40만 회의 장 다운로드를 기록했고, 총합은 50만 회를 훌쩍 넘었다. 2014년 중에 100만 회를 돌파할 것이다.
또 한 가지 재미있는 경험이 최근(위 다운로드 통계에는 아직 반영 안 됨)에 있었다. Hacker News 메인 페이지에 올라가고 Reddit에 긴 토론이 붙은 것이다. 우리는 사이트에 Google Analytics를 달아둬서 반응을 볼 수 있었고, 그 덕에 얼마나 많은 사람이 들어왔는지 정확히 알 수 있었다. 결과는 놀라웠다. 메인 웹 페이지가 하루 만에 130만 회가 넘는 페이지뷰를 기록했다! 1년 누적 페이지뷰를 거의 두 배로 만든 하루였다. 독자가 있는 사이트(Hacker News, Reddit 등)는, 사람들이 보고 싶어하는 콘텐츠만 있다면, 정말 많은 시선을 데려올 수 있다. 그날 페이지 상단에 광고라도 달아둘 걸 그랬나? 음, 아마도 다른 사람의 운영체제 책 광고가 떴겠지.
책이 또 미친 재미있는 영향 한 가지는 내 강의 평가였다. 물론 가르치면 가르칠수록 실력이 늘기도 하지만, 학생들은 우리가 책을 만들고 있다는 사실 자체를 꽤 좋아했고, 이제 수업 말고도 참고할 자료가 생겼다는 점을 반겼다. 책 작업을 시작한 시점(아래 그래프의 4번째 수업)과 동시에 내 강의 평점은 눈에 띄게 올랐다.
시간에 따른 537 수업의 내 평점: 그래, 난 더 나아지고 있었다 — 적어도 더 높은 점수를 주도록 설득하는 데는. 책도 도움이 된 듯. 뇌물은 덤.
솔직히 말하면, 평점 상승에 책만이 영향을 준 건 아니다. 그냥 학부 강의에 더 공을 들였을 뿐이다. 처음에는 그럭저럭 했고; 이제는 진짜 잘해 보려 했다. 책이 분명 핵심 요소였지만 전부는 아니었다.
지금까지의 경험이 나를 하나의 단순한 진리로 이끌었다. 무료 온라인 교과서(FOB)는 고전적인 교과서보다 그저 우월하다. 우리는 어떤 필요에 의해 FOB라는 길 위에 올랐지만, 이 새로운 모델에는 장점이 많다. 다른 이들이 더 잘 정리했겠지만(예: Craig Mod), 내가 생각하는 무료 교과서를 써야 할 이유는 다음과 같다.
여기서 이렇게 물을 수도 있다. 그래도 돈은 벌 수 있나? (a) FOB로 약간의 수익(인쇄본, 더 기능이 많은 전자본 판매 등)은 낼 수 있다고 보지만, 더 중요한 건 (b) 대부분의 교과서 저자는 애초에 돈 때문에 책을 쓰지 않는다는 점이다. 내 지도교수였던 David Patterson(무척 성공한 교과서 저자)은 오래전에 “돈 벌려고 글을 쓰는 사람은 없어”라고 말했고, 어머니께 책에 대한 사람들의 반응을 전할 때가 가장 자랑스러웠다고 회상하곤 했다.
만약 변화에 기꺼이 적응한다면, 출판사는 FOB의 세계에서도 여전히 중요한 역할을 할 수 있다고 생각한다. 광고와 홍보를 맡을 수 있고; 인쇄본 제작(비슷하게 낮은 비용으로 하길!)을 담당할 수 있고; 좋은 책을 발굴·홍보하며 돈도 벌면서, 동시에 콘텐츠는 온라인에서 무료로 두는, 다양한 역할을 할 수 있다.
킨들 뒤에 숨어 있는 저 무시무시한 남자는 누구일까? 글쎄, 하지만 그의 웃음은 조심하라.)
출판사가 과연 적응할까? 알기 어렵다. 레이블, 스튜디오, 학술지 같은 고전 산업을 보면, 현대화는 매우 더디고, 수세적이며, 종종 과거에 집착한다 — 비관적인 이유들이다. 그래도 출판계에는 똑똑한 사람들이 분명히 있고, 시대의 변화를 잘 읽는다면, FOB의 미래에서 자기 역할을 찾아낼 것이다. 아니면 사라지거나.
우리의 소박한 성공만으로도, 무료 온라인 도서(FOB)의 시대가 오고 있음은 분명하다. 고전 인쇄 교과서는 (a) 비싸고 (b) 품질이 균일하지 않다. 반면 FOB는 최소한 비싸지 않다(정말, 공짜다!). 품질도 같거나 더 좋을 수 있고, 잦은 마이크로 개정으로 시간이 갈수록 좋아질 가능성도 있다. FOB는 링크할 수 있고, Google 검색으로 쉽게 발견·활용될 수 있으므로, 고전 인쇄본 안에 갇힌 정보보다 훨씬 더 많은 사람에게 읽힐 가능성이 높다.
당신은 책을 쓸 생각이 있는가? 꼭 이렇게 해보라. 쓰기 시작하고, 쓰는 대로 웹사이트에 올려라. 자신의 수업에서 써라. 학생 피드백을 들어라. 그리고 즐겨라! 전 과정이 꽤 재미있고 보람 있다는 걸 우리는 알게 됐다. 무료 자료로 CS 교육의 수준을 끌어올리자. 최전선의 연구 기관에서 일하는 기술자라면, 우리가 앞장서야 하지 않겠는가?
게시일: 2014년 1월 28일 — Remzi Arpaci-Dusseau