tag:blogger.com,1999:blog-72988432781629294592024-03-13T16:49:56.946+09:00DRYKISSnilakanthahttp://www.blogger.com/profile/00407215141610059255noreply@blogger.comBlogger63125tag:blogger.com,1999:blog-7298843278162929459.post-25946936707858114772017-04-20T18:59:00.002+09:002017-04-20T18:59:56.365+09:00유시민의 공감필법<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbWLCjoETJj8nt4wZ258cwlcQzLk7-_yOsvvpfL09Tkl-tmSqpB2Txsx3OR33BTNI6xDVPmBHe8VczaMA9Br7ozYchYVQFfvRPI4OjdfbKojsqB1uU-x2CGaIaGifI7mBNjIpVMQRmQgDY/s1600/IMG_20170418_152808.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbWLCjoETJj8nt4wZ258cwlcQzLk7-_yOsvvpfL09Tkl-tmSqpB2Txsx3OR33BTNI6xDVPmBHe8VczaMA9Br7ozYchYVQFfvRPI4OjdfbKojsqB1uU-x2CGaIaGifI7mBNjIpVMQRmQgDY/s320/IMG_20170418_152808.jpg" width="320" /></a></div>
<br />
<br />
어떤 생각과 자세로 책을 읽고 그로부터 공부를 해야 할지에 대한 유시민의 강연을<br />
책으로 엮었다. 분량이 길지 않고 구어체로 되어있어 들고다니며 쉽게 읽을 수<br />
있다. 오랫만에 출퇴근 길에 읽은 책이다. 단순히 지식을 머리에 구겨넣는게<br />
아니라 필자의 감정에 공감하며 감동을 얻을 수 있는 읽기를 추천하는데, 책을<br />
읽다가 가슴에 벅차오르는 감동의 순간은 나도 여러번 겪은 바라 공감할 수 있었다.<br />
그런 감동이 단순히 한 순간으로 끝나는게 아니라 유시민의 정치 행보에 어떻게<br />
영향을 끼쳤는지를 굴원과 등공문을 인용하며 이야기한 대목은 그런 감정을 내게도<br />
주었고 코끝이 시려지기까지 했다.<br />
<br />
```<br />
저는 '위인전 인생관'을 버렸습니다. 훌륭한 사람이 되는 것이 아니라 나답게 사는<br />
것을 삶의 목표로 삼았습니다. 이렇게 생각을 바꾸는 데격려를 준 문장을 하나<br />
들어보겠습니다. '이렇게 사는 건 문제가 있는 것 같아. 다르게 사는 건 안 될까?'<br />
고민할 때 도움이 된 글입니다. 춘추전국시대 굴원이라는 사람이 쓴 '어부사'의<br />
문장인데요, 굴원은 왕과 세상에 대한 원망을 담은 '이소'라는 글로도 유명합니다.<br />
굴원은 백성과 국가를 위해서 충성을 다했는데 어리석은 왕이 알아주지 않았어요.<br />
굴원은 억울하게 삭탈관직당하고 내쫓겼을 때 '이소'를 썼고, 죽으러 가는 길에<br />
'어부사'를 남겼습니다. '어부사'에서 굴원은 길을 가다 우연히 만난 어부한테서<br />
다음과 같은 말을 들었다고 써놓았습니다.<br />
<br />
> 창랑의 물이 맑으면 갓끈을 씻고, 창랑의 물이 흐리면 발을 씻으리라.<br />
```<br />
<div>
<br /></div>
<div>
<div>
```</div>
<div>
저는 굴원의 '어부사'에 기대어 정치를 그만두었습니다. 대중이 나를 원하면 정치를</div>
<div>
하고 대중이 원치 않으면 내가 하고 싶은 일을 하면 되겠구나, 생각한거죠. 선거에서</div>
<div>
세번 떨어졌으니까 사람들이 저를 원하지 않는 게 확실했습니다. 제가 잘났든</div>
<div>
못났든, 제 눈에는 창랑의 물이 탁해 보여서 발을 씻고 제가 가고 싶은 길을</div>
<div>
떠났습니다. 책임 회피라고 볼 수도 있고, 또 어떻게 보면 오만하기 그지없는 삶의</div>
<div>
방식이라고 할 수도 있겠지만, 저는 괜찮다고 생각했습니다. 인생행로를 변경하려고</div>
<div>
할 때 누군가의 글에서 용기를 얻는 것도 공부라고 할 수 있지 않을까요?</div>
<div>
```</div>
</div>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-10809007332814432742016-09-04T09:19:00.001+09:002016-09-04T12:09:26.688+09:00git on git어느새 2.10 버전까지 나왔는데, git 을 항상 패키지로 설치해 쓰다보니 사용중인 버전은 항상 최신에 비해 많이 낮다. 데스크탑도 재설치 했겠다, 이김에 git 도 소스로 설치해서 사용하기로 해보았다. 몇가지 종속성 패키지 설치를 제외하곤 매우 간단하다. 설치도 $HOME/bin/ 밑에 되므로 시스템의 다른 사용자 눈치보지 않고 설치할 수 있다.<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo apt-get install libssl-dev libcurl4-gnutls-dev libexpat1-dev</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ git clone https://github.com/git/git</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ cd git</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ git checkout v2.10.0</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ time make</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ make install</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ git --version</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">git version 2.10.0</span>SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-42992248287777500822016-04-10T12:58:00.002+09:002016-04-12T21:31:28.293+09:00TED 리누스 토발즈 영상 자막 번역오랫만의 블로그 글이네요.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.ted.com/talks/linus_torvalds_the_mind_behind_linux?language=en" target="_blank"><img border="0" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMnYPydy1FhF9ywdw1_F_H2HmayYcSZSTOY7-InSo9mq0WacQaa8frv-sTI92pa425r0FcZFaRtkx-3eWRdNZULz2CxlUIUEXBr0hFiJb-IiiIwu1oHm6Wr3kg8Hx33KP38_daSNJey3c1/s400/Screenshot+from+2016-04-10+13%253A00%253A54.png" width="400" /></a><span id="goog_897305798"></span><span id="goog_897305799"></span><a href="https://www.blogger.com/"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<i>그림 출처: ted.com</i></div>
<br />
<br />
TED 에 리누스 토발즈가 나왔습니다:<br />
<a href="http://www.ted.com/talks/linus_torvalds_the_mind_behind_linux?language=en" target="_blank">http://www.ted.com/talks/linus_torvalds_the_mind_behind_linux?language=en</a><br />
영상을 소개해준 권순선님 포스트에 번역이 있었으면 좋겠다는 의견을 단 분이 계시기에 자막을 번역하려 했는데 번역 지원을 하면 승인을 대기해야 하네요. 최대 5일만에 답을 준다고 하는데, 성격이 급한 관계로, 여기에 먼저 번역을 해봅니다. 인터뷰 방식으로 진행된만큼 구어체를 최대한 살려봤는데, 읽기엔 오히려 불편할지도 모르겠습니다만 일단 그대로 올립니다. 오역이나 등등 제보해 주시면 감사하겠습니다 :)<br />
<br />
UPDATE: 번역 지원에 대해 승인이 드디어 떨어졌는데, 그사이 한글 자막 작업을 시작한 분이 계시네요. 해당 번역이 완료되면 곧 정식으로 자막이 나오지 않을까 싶습니다. :)<br />
<br />
===============================================================<br />
<br />
크리스 앤더슨: 이건 참 이상한 일이예요. 당신의 소프트웨어인 리눅스는 수백만대의 컴퓨터에 있고, 인터넷의 대부분을 운영하고 있죠. 그리고 약 15억대의 안드로이드 기기들이 있을 거라고 전 생각해요. 당신의 소프트웨어는 그것들 각각에 있는 거죠. 이건 참 놀라운 일입니다. 당신은 분명 이 모든 것을 이끌어온 대단한 소프트웨어 본부를 두고 있을 거예요. 제 생각은 그겁니다 -- 그리고 전 그 본부 사진을 보고 충격을 받았어요. 제 말은, 이게 -- 이게 바로 그 리눅스 세상의 본부입니다.<br />
<br />
(웃음)<br />
<br />
(박수)<br />
<br />
<div class="talk-transcript__para talk-transcript__para--current" style="background-color: #f7f7f7; box-sizing: border-box; color: #333333; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; display: block; font-weight: 700; left: -4em; margin-left: -23px; margin-top: 0px; position: absolute; text-align: right; top: 0px; width: 4em;"><br class="Apple-interchange-newline" />00:12</data><span class="talk-transcript__para__text" style="border-color: rgb(51, 51, 51); border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1460" id="t-1460" style="box-sizing: border-box;">Chris Anderson: This is such a strange thing.</span> <span class="talk-transcript__fragment talk-transcript__fragment--current" data-time="3659" id="t-3659" style="box-sizing: border-box; color: #111111; text-decoration: underline;">Your software, Linux, is in millions of computers,</span> <span class="talk-transcript__fragment" data-time="6841" id="t-6841" style="box-sizing: border-box;">it probably powers much of the Internet.</span> <span class="talk-transcript__fragment" data-time="10412" id="t-10412" style="box-sizing: border-box;">And I think that there are, like,</span> <span class="talk-transcript__fragment" data-time="12199" id="t-12199" style="box-sizing: border-box;">a billion and a half active Android devices out there.</span> <span class="talk-transcript__fragment" data-time="15568" id="t-15568" style="box-sizing: border-box;">Your software is in every single one of them.</span> <span class="talk-transcript__fragment" data-time="18808" id="t-18808" style="box-sizing: border-box;">It's kind of amazing.</span> <span class="talk-transcript__fragment" data-time="19982" id="t-19982" style="box-sizing: border-box;">You must have some amazing software headquarters driving all this.</span> <span class="talk-transcript__fragment" data-time="25041" id="t-25041" style="box-sizing: border-box;">That's what I thought -- and I was shocked when I saw a picture of it.</span> <span class="talk-transcript__fragment" data-time="28371" id="t-28371" style="box-sizing: border-box;">I mean, this is --</span> <span class="talk-transcript__fragment" data-time="29595" id="t-29595" style="box-sizing: border-box;">this is the Linux world headquarters.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">00:42</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="31869" id="t-31869" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">00:44</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="33883" id="t-33883" style="box-sizing: border-box;">(Applause)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">00:48</data></div>
<br />
리누스 토발즈: 정말 그렇게 대단한 본부같아 보이진 않죠. 그리고 이 사진에서 가장 흥미로운 부분은, 그리고 사람들이 대부분 반응하는 것은, 저 걸으면서 일할 수 있는 입식 책상이라는 점을 이야기해야 할 것 같습니다. 그게 제 사무실에서 가장 재미있는 부분이고 전 더이상 저걸 사용하지 않아요. 그리고 거기엔 두가지 일이 관련되어 있는 것 같아요.<br />
<br />
제가 일하는 방식은... 전 외부의 자극을 받지 않고 싶어요. 당신들도 볼 수 있을텐데, 저 벽은 밝은 초록색입니다. 정신과에서 저런 색의 벽을 사용한다고 하더군요.<br />
<br />
(웃음)<br />
<br />
저건 편안한 색깔 같고, 정말 절 자극하지 않는 그런 것이에요.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="37913" id="t-37913" style="box-sizing: border-box;"><br class="Apple-interchange-newline" />Linus Torvalds: It really doesn't look like much.</span> <span class="talk-transcript__fragment" data-time="40223" id="t-40223" style="box-sizing: border-box;">And I have to say,</span> <span class="talk-transcript__fragment" data-time="41923" id="t-41923" style="box-sizing: border-box;">the most interesting part in this picture,</span><span class="talk-transcript__fragment" data-time="45767" id="t-45767" style="box-sizing: border-box;">that people mostly react to,</span> <span class="talk-transcript__fragment" data-time="47494" id="t-47494" style="box-sizing: border-box;">is the walking desk.</span> <span class="talk-transcript__fragment" data-time="48961" id="t-48961" style="box-sizing: border-box;">It is the most interesting part in my office</span> <span class="talk-transcript__fragment" data-time="51684" id="t-51684" style="box-sizing: border-box;">and I'm not actually using it anymore.</span> <span class="talk-transcript__fragment" data-time="53668" id="t-53668" style="box-sizing: border-box;">And I think the two things are related.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">01:08</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="57206" id="t-57206" style="box-sizing: border-box;">The way I work is ...</span> <span class="talk-transcript__fragment" data-time="61245" id="t-61245" style="box-sizing: border-box;">I want to not have external stimulation.</span> <span class="talk-transcript__fragment" data-time="66170" id="t-66170" style="box-sizing: border-box;">You can kind of see, on the walls are this light green.</span> <span class="talk-transcript__fragment" data-time="71461" id="t-71461" style="box-sizing: border-box;">I'm told that at mental institutions they use that on the walls.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">01:26</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="75949" id="t-75949" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">01:28</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="77020" id="t-77020" style="box-sizing: border-box;">It's like a calming color,</span> <span class="talk-transcript__fragment" data-time="78829" id="t-78829" style="box-sizing: border-box;">it's not something that really stimulates you.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">01:34</data><data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;"><br /></data></div>
<br />
여기서 컴퓨터는 보이지 않으실 겁니다, 화면만 보이죠. 하지만 제가 제 컴퓨터에 대해서 신경쓰는 가장 큰 것은 -- 컴퓨터는 크고 성능이 좋을 필요 없어요, 전 그게 좋긴 하지만요 -- 정말로, 완전히, 조용해야 한다는 겁니다. 구글에서 일하는 몇몇 분들을 아는데, 그분들은 자신만의 작은 데이터 센터를 집에 두고 있고, 전 그러지 않아요. 제 사무실은 여러분이 이제껏 보아온 것 중 가장 지루한 사무실입니다. 그리고 전 거기에 조용히 앉아있죠. 고양이가 다가오면, 제 무릎에 앉죠. 그리고 전 고양이의 가르랑거리는 소리를 듣길 원하지, 컴퓨터의 팬 소리는 듣고 싶지 않아요.<br />
<br />
CA: 이건 놀라운 일인데요, 왜냐면 이렇게 일하면서, 토발즈씨는 이 거대한 기술 제국을 운영할 수 있다는 건데 -- 이건 제국이죠 -- 이게 바로 오픈 소스의 힘에 대한 놀라운 증거가 아닐까 싶습니다.<br />
<br />
토발즈씨는 어떻게 오픈소스를 이해하게 됐고 리눅스 개발을 이끌었는지 이야기해 주시죠.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="83064" id="t-83064" style="box-sizing: border-box;">What you can't see is the computer here, you only see the screen,</span> <span class="talk-transcript__fragment" data-time="87513" id="t-87513" style="box-sizing: border-box;">but the main thing I worry about in my computer is --</span> <span class="talk-transcript__fragment" data-time="90918" id="t-90918" style="box-sizing: border-box;">it doesn't have to be big and powerful, although I like that --</span> <span class="talk-transcript__fragment" data-time="94277" id="t-94277" style="box-sizing: border-box;">it really has to be completely silent.</span> <span class="talk-transcript__fragment" data-time="97975" id="t-97975" style="box-sizing: border-box;">I know people who work for Google</span> <span class="talk-transcript__fragment" data-time="100010" id="t-100010" style="box-sizing: border-box;">and they have their own small data center at home,</span> <span class="talk-transcript__fragment" data-time="103241" id="t-103241" style="box-sizing: border-box;">and I don't do that.</span> <span class="talk-transcript__fragment" data-time="104417" id="t-104417" style="box-sizing: border-box;">My office is the most boring office you'll ever see.</span> <span class="talk-transcript__fragment" data-time="108146" id="t-108146" style="box-sizing: border-box;">And I sit there alone in the quiet.</span> <span class="talk-transcript__fragment" data-time="112136" id="t-112136" style="box-sizing: border-box;">If the cat comes up,</span> <span class="talk-transcript__fragment" data-time="114197" id="t-114197" style="box-sizing: border-box;">it sits in my lap.</span> <span class="talk-transcript__fragment" data-time="116058" id="t-116058" style="box-sizing: border-box;">And I want to hear the cat purring,</span> <span class="talk-transcript__fragment" data-time="118272" id="t-118272" style="box-sizing: border-box;">not the sound of the fans in the computer.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">02:12</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="121470" id="t-121470" style="box-sizing: border-box;">CA: So this is astonishing,</span> <span class="talk-transcript__fragment" data-time="122803" id="t-122803" style="box-sizing: border-box;">because working this way,</span> <span class="talk-transcript__fragment" data-time="125505" id="t-125505" style="box-sizing: border-box;">you're able to run this vast technology empire --</span> <span class="talk-transcript__fragment" data-time="128517" id="t-128517" style="box-sizing: border-box;">it is an empire --</span> <span class="talk-transcript__fragment" data-time="129762" id="t-129762" style="box-sizing: border-box;">so that's an amazing testament to the power of open source.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">02:24</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="133486" id="t-133486" style="box-sizing: border-box;">Tell us how you got to understand open source</span> <span class="talk-transcript__fragment" data-time="137686" id="t-137686" style="box-sizing: border-box;">and how it lead to the development of Linux.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">02:32</data></div>
<br />
LT: 제말은, 전 여전히 혼자 일해요. 진짜로요 -- 전 집에서 혼자 일하는데, 대부분의 경우는 목욕 가운만 입고 있어요. 저 사진의 사진작가가 왔을 땐, 전 옷을 입었고, 그래서 사진에서는 제가 옷을 입고 있는 겁니다.<br />
<br />
(웃음)<br />
<br />
그리고 그게 제가 항상 일하는 방식이예요. 제 말은, 이게 제가 어떻게 리눅스를 시작했는가이기도 하다는 겁니다. 전 리눅스를 협업 프로젝트로 시작하지 않았어요. 전 그당시 저 자신을 위해 했던 많은 프로젝트들 가운데 하나로 리눅스를 시작했는데, 그 프로젝트들을 진행한 이유는, 부분적으로는 제가 그 결과물을 필요로 하기도 했지만, 그보다도 그냥 프로그래밍을 좋아하기 때문이었죠. 그러니 그건 여정의 끝에 관한 것이었는데, 25년이나 지난 지금에 와서도 우린 아직 도달하지 못한 여정이죠. 하지만 분명한 사실은 전 저 자신을 위한 프로젝트를 찾고 있었고 당시 오픈 소스는 없었단 겁니다, 정말로, 적어도 제 레이더망에는요.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="141546" id="t-141546" style="box-sizing: border-box;">LT: I mean, I still work alone.</span> <span class="talk-transcript__fragment" data-time="143075" id="t-143075" style="box-sizing: border-box;">Really -- I work alone in my house,</span> <span class="talk-transcript__fragment" data-time="146666" id="t-146666" style="box-sizing: border-box;">often in my bathrobe.</span> <span class="talk-transcript__fragment" data-time="148080" id="t-148080" style="box-sizing: border-box;">When a photographer shows up, I dress up,</span> <span class="talk-transcript__fragment" data-time="150665" id="t-150665" style="box-sizing: border-box;">so I have clothes on.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">02:42</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="151975" id="t-151975" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">02:44</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="153236" id="t-153236" style="box-sizing: border-box;">And that's how I've always worked.</span> <span class="talk-transcript__fragment" data-time="155332" id="t-155332" style="box-sizing: border-box;">I mean, this was how I started Linux, too.</span> <span class="talk-transcript__fragment" data-time="157364" id="t-157364" style="box-sizing: border-box;">I did not start Linux as a collaborative project.</span> <span class="talk-transcript__fragment" data-time="161037" id="t-161037" style="box-sizing: border-box;">I started it as one in a series of many projects</span> <span class="talk-transcript__fragment" data-time="165939" id="t-165939" style="box-sizing: border-box;">I had done at the time for myself,</span><span class="talk-transcript__fragment" data-time="169920" id="t-169920" style="box-sizing: border-box;">partly because I needed the end result,</span> <span class="talk-transcript__fragment" data-time="171846" id="t-171846" style="box-sizing: border-box;">but even more because I just enjoyed programming.</span> <span class="talk-transcript__fragment" data-time="174172" id="t-174172" style="box-sizing: border-box;">So it was about the end of the journey,</span> <span class="talk-transcript__fragment" data-time="178570" id="t-178570" style="box-sizing: border-box;">which, 25 years later, we still have not reached.</span> <span class="talk-transcript__fragment" data-time="181940" id="t-181940" style="box-sizing: border-box;">But it was really about the fact that I was looking for a project on my own</span> <span class="talk-transcript__fragment" data-time="185681" id="t-185681" style="box-sizing: border-box;">and there was no open source, really, on my radar at all.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">03:20</data></div>
<br />
그리고 벌어진 일은 ... 이 프로젝트는 성장해 나갔고 사람들에게 뽐내고 싶은 무언가가 되었죠. 정말로, 이건 "와우, 내가 해낸 걸 봐봐!" 이상이었어요. 절 믿으세요 -- 그때 그건 그렇게 대단하지 않았어요. 전 그걸 아무나 사용할 수 있게 했고, 그때에는 오픈 소스이지도 않았어요. 그때 그건 그냥 개방된 소스였습니다만, 오늘날 우리가 생각하는 오픈소스 방법론을 사용해 그걸 개선하려는 의도는 전혀 없었어요. 그보다는 이런 거였죠, "봐봐요, 저 지난 반년동안 이걸 만들었는데요, 의견 좀 주세요."<br />
<br />
그리고 다른 사람들이 제게 다가오기 시작했습니다. 헬싱키 대학에서, 전 오픈소스 쪽의 -- 그땐 "프리 소프트웨어" 라고 주로 불렸죠 -- 친구가 한명 있었고 그 친구가 제게 그 방향을 이야기했죠, 이봐, 넌 이 오픈소스 라이센스를 사용할 수 있어. 그리고 전 잠깐동안 그에 대해 생각해 봤습니다. 전 모든 상업적인 것들에 대해 정말 걱정했어요. 제 말은, 그건 제 생각에 대부분의 사람들이 뭘 시작하면 제일 먼저 하는 걱정 중 하나고, 보통은 자신의 작업물로 이득을 보는 누군가에 대한 걱정을 하죠, 그렇죠? 그리고 전 결정했어요, "뭐 아무렴 어때?" 그리고 --<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="189988" id="t-189988" style="box-sizing: border-box;">And what happened is ...</span> <span class="talk-transcript__fragment" data-time="192668" id="t-192668" style="box-sizing: border-box;">the project grows and becomes something you want to show off to people.</span><span class="talk-transcript__fragment" data-time="198552" id="t-198552" style="box-sizing: border-box;">Really, this is more of a, "Wow, look at what I did!"</span> <span class="talk-transcript__fragment" data-time="202693" id="t-202693" style="box-sizing: border-box;">And trust me -- it was not that great back then.</span> <span class="talk-transcript__fragment" data-time="206128" id="t-206128" style="box-sizing: border-box;">I made it publicly available,</span> <span class="talk-transcript__fragment" data-time="208026" id="t-208026" style="box-sizing: border-box;">and it wasn't even open source at that point.</span> <span class="talk-transcript__fragment" data-time="210156" id="t-210156" style="box-sizing: border-box;">At that point it was source that was open, but there was no intention</span> <span class="talk-transcript__fragment" data-time="215349" id="t-215349" style="box-sizing: border-box;">behind using the kind of open-source methodology that we think of today</span> <span class="talk-transcript__fragment" data-time="220487" id="t-220487" style="box-sizing: border-box;">to improve it.</span> <span class="talk-transcript__fragment" data-time="221662" id="t-221662" style="box-sizing: border-box;">It was more like,</span> <span class="talk-transcript__fragment" data-time="222837" id="t-222837" style="box-sizing: border-box;">"Look, I've been working on this for half a year,</span> <span class="talk-transcript__fragment" data-time="226459" id="t-226459" style="box-sizing: border-box;">I'd love to have comments."</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">03:59</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="228717" id="t-228717" style="box-sizing: border-box;">And other people approached me.</span> <span class="talk-transcript__fragment" data-time="231217" id="t-231217" style="box-sizing: border-box;">At the University of Helsinki,</span> <span class="talk-transcript__fragment" data-time="232893" id="t-232893" style="box-sizing: border-box;">I had a friend who was one of the open source --</span> <span class="talk-transcript__fragment" data-time="236632" id="t-236632" style="box-sizing: border-box;">it was called mainly "free software" back then --</span> <span class="talk-transcript__fragment" data-time="240312" id="t-240312" style="box-sizing: border-box;">and he actually introduced me to the notion that, hey,</span> <span class="talk-transcript__fragment" data-time="244610" id="t-244610" style="box-sizing: border-box;">you can use these open-source licenses that had been around.</span> <span class="talk-transcript__fragment" data-time="252114" id="t-252114" style="box-sizing: border-box;">And I thought about it for a while.</span> <span class="talk-transcript__fragment" data-time="254179" id="t-254179" style="box-sizing: border-box;">I was actually worried about the whole commercial interests coming in.</span> <span class="talk-transcript__fragment" data-time="257694" id="t-257694" style="box-sizing: border-box;">I mean, that's one of the worries I think most people who start out have,</span> <span class="talk-transcript__fragment" data-time="262192" id="t-262192" style="box-sizing: border-box;">is that they worry about somebody taking advantage of their work, right?</span> <span class="talk-transcript__fragment" data-time="267603" id="t-267603" style="box-sizing: border-box;">And I decided, "What the hell?"</span> <span class="talk-transcript__fragment" data-time="271740" id="t-271740" style="box-sizing: border-box;">And --</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">04:43</data></div>
<br />
CA: 그리고 어떤 시점에 이르러서는, 누군가가 어떤 코드를 제공했는데, 토발즈씨는 이렇게 생각한거죠, "와, 이건 정말 재밌는걸, 전 이건 생각도 못했어. 이건 분명 이 프로그램을 개선시킬거야."<br />
<br />
LT: 그건 코드를 제공한 사람들로 시작되지도 않았습니다, 그보다는 아이디어를 제공하기 시작한 데서부터 시작되었죠. 그리고 누군가가 여러분의 프로젝트를 들여다보기 시작하다는 사실 자체가 그렇고 -- 그리고 전 다른 것들에 있어서도 마찬가지라고 생각하는데, 코드에서는 분명한 사실입니다 -- 누군가가 여러분의 코드에 관심을 갖는다면, 그리고 그에 대한 의견과 아이디어를 주기 충분할 정도로 들여다본다는 사실이죠. 그건 제게 엄청난 일이었습니다.<br />
<br />
전 그때 21살이었는데요, 따라서 전 젊었는데, 하지만 그때도 이미 인생의 절반을 기본적으로는 프로그래밍으로 보냈어요. 그리고 그전까지 제가 했던 모든 프로젝트는 완전 개인적인 것들이었기에 사람들이 의견을 주고, 코드에 피드백을 주기 시작한 것은 놀랄만한 것이었습니다. 그리고 그사람들이 코드를 주기 시작하기 전에도, 그건, 제 생각에, 제가 "전 다른 사람들을 좋아해요!" 라고 말한 것도 커다란 순간들 중 하나였습니다. 잘못 말한 게 아니예요 -- 전 사교적인 사람이 아닙니다.<br />
<br />
(웃음)<br />
<br />
전 정말로 다른 사람들을 사랑하지 않아요 --<br />
<br />
(웃음)<br />
<br />
하지만 컴퓨터는 좋아하고, 다른 사람들과 이메일로 교류하는 건 좋아하는데, 제게 일종의 버퍼를 주기 때문이죠. 하지만 의견을 주고 제 프로젝트에 관여하는 다른 사람들은 좋아합니다. 그리고 그게 그걸 더욱 더 그렇게 만들었죠.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="272914" id="t-272914" style="box-sizing: border-box;">CA: And then at some point,</span> <span class="talk-transcript__fragment" data-time="274233" id="t-274233" style="box-sizing: border-box;">someone contributed some code that you thought,</span> <span class="talk-transcript__fragment" data-time="276717" id="t-276717" style="box-sizing: border-box;">"Wow, that really is interesting, I would not have thought of that.</span> <span class="talk-transcript__fragment" data-time="279912" id="t-279912" style="box-sizing: border-box;">This could actually improve this."</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">04:52</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="281587" id="t-281587" style="box-sizing: border-box;">LT: It didn't even start by people contributing code,</span> <span class="talk-transcript__fragment" data-time="284136" id="t-284136" style="box-sizing: border-box;">it was more that people started contributing ideas.</span><span class="talk-transcript__fragment" data-time="287748" id="t-287748" style="box-sizing: border-box;">And just the fact that somebody else takes a look at your project --</span> <span class="talk-transcript__fragment" data-time="291018" id="t-291018" style="box-sizing: border-box;">and I'm sure it's true of other things, too,</span> <span class="talk-transcript__fragment" data-time="293590" id="t-293590" style="box-sizing: border-box;">but it's definitely true in code --</span> <span class="talk-transcript__fragment" data-time="295451" id="t-295451" style="box-sizing: border-box;">is that somebody else takes an interest in your code,</span> <span class="talk-transcript__fragment" data-time="298974" id="t-298974" style="box-sizing: border-box;">looks at it enough to actually give you feedback</span> <span class="talk-transcript__fragment" data-time="301520" id="t-301520" style="box-sizing: border-box;">and give you ideas.</span> <span class="talk-transcript__fragment" data-time="303433" id="t-303433" style="box-sizing: border-box;">That was a huge thing for me.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">05:16</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="305158" id="t-305158" style="box-sizing: border-box;">I was 21 at the time, so I was young,</span> <span class="talk-transcript__fragment" data-time="308374" id="t-308374" style="box-sizing: border-box;">but I had already programmed for half my life, basically.</span> <span class="talk-transcript__fragment" data-time="312372" id="t-312372" style="box-sizing: border-box;">And every project before that had been completely personal</span> <span class="talk-transcript__fragment" data-time="316368" id="t-316368" style="box-sizing: border-box;">and it was a revelation when people just started commenting,</span> <span class="talk-transcript__fragment" data-time="319499" id="t-319499" style="box-sizing: border-box;">started giving feedback on your code.</span> <span class="talk-transcript__fragment" data-time="322824" id="t-322824" style="box-sizing: border-box;">And even before they started giving code back,</span> <span class="talk-transcript__fragment" data-time="326620" id="t-326620" style="box-sizing: border-box;">that was, I think, one of the big moments where I said,</span> <span class="talk-transcript__fragment" data-time="329385" id="t-329385" style="box-sizing: border-box;">"I love other people!"</span> <span class="talk-transcript__fragment" data-time="331282" id="t-331282" style="box-sizing: border-box;">Don't get me wrong --</span> <span class="talk-transcript__fragment" data-time="332463" id="t-332463" style="box-sizing: border-box;">I'm actually not a people person.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">05:45</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="334111" id="t-334111" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">05:48</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="337500" id="t-337500" style="box-sizing: border-box;">I don't really love other people --</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">05:51</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="340076" id="t-340076" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">05:52</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="341120" id="t-341120" style="box-sizing: border-box;">But I love computers,</span> <span class="talk-transcript__fragment" data-time="342770" id="t-342770" style="box-sizing: border-box;">I love interacting with other people on email,</span> <span class="talk-transcript__fragment" data-time="345009" id="t-345009" style="box-sizing: border-box;">because it kind of gives you that buffer.</span> <span class="talk-transcript__fragment" data-time="348365" id="t-348365" style="box-sizing: border-box;">But I do love other people who comment and get involved in my project.</span> <span class="talk-transcript__fragment" data-time="354890" id="t-354890" style="box-sizing: border-box;">And it made it so much more.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">06:08</data></div>
<br />
CA: 그럼 그렇게 개발이 되고, 사람들이 받아가기 시작하고, 이렇게 생각하게 되는 순간이 있었나요? "잠깐만, 이건 정말 거대한 무언가가 되어서 친절한 피드백을 받는 개인 프로젝트만이 아니라 전체 기술 세계에 폭발적인 어떤 개발이 될지도 몰라"<br />
<br />
LT: 실제로는 안그랬습니다. 제말은, 제게 중요한 포인트는, 정말로, 그게 거대해졌을 때가 아니라, 작았을 때였습니다. 제게 중요한 시점은 더이상 혼자가 아니고 10명이, 또는 100명의 사람들이 참여했을 때였습니다 -- 그건 큰 포인트죠. 그리고나선 모든 것이 점진적으로 되었습니다. 100 명의 사람들이 100만명이 되는 건 그렇게 큰 일이 아닙니다 -- 제게는요. 그러니까, 제말은, 만약 여러분이 --<br />
<br />
(웃음)<br />
<br />
여러분이 당신이 만든 결과물을 팔려고 한다면 그건 큰 일입니다 -- 제가 틀렸다곤 하지 마세요. 하지만 기술에 관심이 있고, 그 프로젝트에 관심이 있다면, 커다란 부분은 커뮤니티를 형성하는 것입니다. 그러고나면 커뮤니티는 점진적으로 성장합니다. 그리고 제가 이런식으로 생각하는 어떤 하나의 순간은 없어요, "와, 이제 됐다!" 왜나면 그건 -- 제 말은 -- 상대적으로 오랜 시간을 그렇게 생각하게 됩니다.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="357273" id="t-357273" style="box-sizing: border-box;">CA: So was there a moment when you saw what was being built</span> <span class="talk-transcript__fragment" data-time="360131" id="t-360131" style="box-sizing: border-box;">and it suddenly started taking off,</span> <span class="talk-transcript__fragment" data-time="362362" id="t-362362" style="box-sizing: border-box;">and you thought, "Wait a sec, this actually could be something huge,</span> <span class="talk-transcript__fragment" data-time="365676" id="t-365676" style="box-sizing: border-box;">not just a personal project that I'm getting nice feedback on,</span> <span class="talk-transcript__fragment" data-time="368612" id="t-368612" style="box-sizing: border-box;">but a kind of explosive development in the whole technology world"?</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">06:24</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="373821" id="t-373821" style="box-sizing: border-box;">LT: Not really.</span> <span class="talk-transcript__fragment" data-time="375004" id="t-375004" style="box-sizing: border-box;">I mean, the big point for me, really, was not when it was becoming huge,</span> <span class="talk-transcript__fragment" data-time="378600" id="t-378600" style="box-sizing: border-box;">it was when it was becoming little.</span> <span class="talk-transcript__fragment" data-time="381709" id="t-381709" style="box-sizing: border-box;">The big point for me was not being alone</span> <span class="talk-transcript__fragment" data-time="385250" id="t-385250" style="box-sizing: border-box;">and having 10, maybe 100 people being involved --</span> <span class="talk-transcript__fragment" data-time="388991" id="t-388991" style="box-sizing: border-box;">that was a big point.</span> <span class="talk-transcript__fragment" data-time="390494" id="t-390494" style="box-sizing: border-box;">Then everything else was very gradual.</span> <span class="talk-transcript__fragment" data-time="393557" id="t-393557" style="box-sizing: border-box;">Going from 100 people to a million people is not a big deal -- to me.</span> <span class="talk-transcript__fragment" data-time="397840" id="t-397840" style="box-sizing: border-box;">Well, I mean, maybe it is if you're --</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">06:50</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="399697" id="t-399697" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">06:51</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="400722" id="t-400722" style="box-sizing: border-box;">If you want to sell your result then it's a huge deal --</span> <span class="talk-transcript__fragment" data-time="403464" id="t-403464" style="box-sizing: border-box;">don't get me wrong.</span> <span class="talk-transcript__fragment" data-time="404639" id="t-404639" style="box-sizing: border-box;">But if you're interested in the technology</span> <span class="talk-transcript__fragment" data-time="406790" id="t-406790" style="box-sizing: border-box;">and you're interested in the project,</span> <span class="talk-transcript__fragment" data-time="408669" id="t-408669" style="box-sizing: border-box;">the big part was getting the community.</span> <span class="talk-transcript__fragment" data-time="410574" id="t-410574" style="box-sizing: border-box;">Then the community grew gradually.</span> <span class="talk-transcript__fragment" data-time="412222" id="t-412222" style="box-sizing: border-box;">And there's actually not a single point where I went like,</span> <span class="talk-transcript__fragment" data-time="416166" id="t-416166" style="box-sizing: border-box;">"Wow, that just took off!" because it --</span> <span class="talk-transcript__fragment" data-time="418366" id="t-418366" style="box-sizing: border-box;">I mean -- it took a long time, relatively.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">07:12</data></div>
<br />
CA: 그래서 제가 이야기하는 모든 기술들은 엄청나게 변화해가며 토발즈씨를 인정하게 하는군요. 그리고 그건 리눅스만이 아니고, Git 이라 불리는 것도 있는데, 소프트ㅇ웨어 개발을 관리하는 시스템이죠. 그거에 대해서, 그리고 거기서 토발즈씨의 역할을 짧게 설명해 주시죠.<br />
<br />
LT: 우리가 가졌던 문제들 중 하나는, 그리고 이건 나타나는데 시간이 좀 걸렸는데, 여러분이 ... 여러분이 일하는 프로젝트가 10명에서 100명으로 그리고 10,000 명으로 늘어나면, -- 제 말은, 지금 우리가 커널에서 딱 그 상황입니다, 우린 매 릴리즈마다 1,000 명의 사람들이 관여되어 있고, 그 릴리즈는 두달마다, 대략 두세달에 한번씩 됩니다. 그런 사람들 중 일부는 많은 일을 하진 않아요. 매우 작은 변경을 만들어내는 사람들이 매우 많습니다.<br />
<br />
하지만 이걸 관리하려면, 그 규모가 관리를 어떻게 해야 하는지를 바꿉니다. 그리고 우린 많은 고통을 겪어왔죠. 그리고 소스 코드 관리만을 위한 프로젝트들이 있습니다. CVS 는 가장 일반적으로 사용되던 것인데, 전 CVS 를 매우 싫어해서 손대는 것도 거부하고 급진적이고 흥미롭던 어떤걸 사용해 봤는데 모두가 싫어하더군요.<br />
<br />
CA: (웃음)<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="421714" id="t-421714" style="box-sizing: border-box;">CA: So all the technologists that I talk to really credit you</span> <span class="talk-transcript__fragment" data-time="424714" id="t-424714" style="box-sizing: border-box;">with massively changing their work.</span> <span class="talk-transcript__fragment" data-time="427612" id="t-427612" style="box-sizing: border-box;">And it's not just Linux,</span> <span class="talk-transcript__fragment" data-time="429259" id="t-429259" style="box-sizing: border-box;">it's this thing called Git,</span> <span class="talk-transcript__fragment" data-time="430729" id="t-430729" style="box-sizing: border-box;">which is this management system for software development.</span> <span class="talk-transcript__fragment" data-time="434765" id="t-434765" style="box-sizing: border-box;">Tell us briefly about that and your role in that.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">07:29</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="438481" id="t-438481" style="box-sizing: border-box;">LT: So one of the issues we had,</span> <span class="talk-transcript__fragment" data-time="440294" id="t-440294" style="box-sizing: border-box;">and this took a while to start to appear,</span> <span class="talk-transcript__fragment" data-time="443370" id="t-443370" style="box-sizing: border-box;">is when you ...</span> <span class="talk-transcript__fragment" data-time="445708" id="t-445708" style="box-sizing: border-box;">When you grow from having 10 people or 100 people working on a project</span> <span class="talk-transcript__fragment" data-time="451064" id="t-451064" style="box-sizing: border-box;">to having 10,000 people, which --</span> <span class="talk-transcript__fragment" data-time="453476" id="t-453476" style="box-sizing: border-box;">I mean, right now we're in the situation where just on the kernel,</span> <span class="talk-transcript__fragment" data-time="456966" id="t-456966" style="box-sizing: border-box;">we have 1,000 people involved in every single release</span><span class="talk-transcript__fragment" data-time="460164" id="t-460164" style="box-sizing: border-box;">and that's every two months, roughly two or three months.</span> <span class="talk-transcript__fragment" data-time="464336" id="t-464336" style="box-sizing: border-box;">Some of those people don't do a lot.</span> <span class="talk-transcript__fragment" data-time="466781" id="t-466781" style="box-sizing: border-box;">There's a lot of people who make small, small changes.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">08:00</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="469388" id="t-469388" style="box-sizing: border-box;">But to maintain this,</span> <span class="talk-transcript__fragment" data-time="471658" id="t-471658" style="box-sizing: border-box;">the scale changes how you have to maintain it.</span> <span class="talk-transcript__fragment" data-time="474571" id="t-474571" style="box-sizing: border-box;">And we went through a lot of pain.</span><span class="talk-transcript__fragment" data-time="478713" id="t-478713" style="box-sizing: border-box;">And there are whole projects that do only source-code maintenance.</span> <span class="talk-transcript__fragment" data-time="485266" id="t-485266" style="box-sizing: border-box;">CVS is the one that used to be the most commonly used,</span> <span class="talk-transcript__fragment" data-time="488582" id="t-488582" style="box-sizing: border-box;">and I hated CVS with a passion and refused to touch it</span> <span class="talk-transcript__fragment" data-time="492503" id="t-492503" style="box-sizing: border-box;">and tried something else that was radical and interesting</span> <span class="talk-transcript__fragment" data-time="495590" id="t-495590" style="box-sizing: border-box;">and everybody else hated.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">08:30</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="499004" id="t-499004" style="box-sizing: border-box;">CA: (Laughs)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">08:31</data></div>
<br />
LT: 그리고 우리는 이 안좋은 위치에 머물렀는데, 수천명의 사람들이 참여하고 싶어했지만, 많은 점에서, 제가 일종의 중단점이었던 위치로, 전 수천명의 사람들과 함께 일할 수 있는 지점까지 규모를 확장하지 못하고 있었어요.<br />
<br />
그래서 Git 은 제 두번째로 큰 프로젝트인데, 제 첫번째 큰 프로젝트를 관리하기 위해 저를 위해 만들어졌을 뿐입니다. 그리고 이게 말 그대로 제가 일을 하는 방식이예요. 제가 코드를 짜는건 -- 음, 전 재미로 코드를 짭니다만 -- 하지만 전 어떤 의미가 있는 코드를 짜고 싶고 그래서 제가 여지껏 해왔던 모든 프로젝트는 제게 필요한 것들이었고 그리고 --<br />
<br />
CA: 그러니, 리눅스와 Git 둘 다 너무 많은 사람들과는 일하지 않으려는 토발즈 씨의 소망에서 의도치 않았던 결과로 나타난 것들이로군요.<br />
<br />
LT: 바로 그겁니다. 맞아요.<br />
<br />
(웃음)<br />
<br />
CA: 그거 참 놀랍네요. LT: 그렇죠.<br />
<br />
(박수)<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="500402" id="t-500402" style="box-sizing: border-box;">LT: And we were in this bad spot,</span> <span class="talk-transcript__fragment" data-time="502514" id="t-502514" style="box-sizing: border-box;">where we had thousands of people who wanted to participate,</span> <span class="talk-transcript__fragment" data-time="505355" id="t-505355" style="box-sizing: border-box;">but in many ways, I was the kind of break point,</span> <span class="talk-transcript__fragment" data-time="510420" id="t-510420" style="box-sizing: border-box;">where I could not scale to the point</span> <span class="talk-transcript__fragment" data-time="512968" id="t-512968" style="box-sizing: border-box;">where I could work with thousands of people.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">08:46</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="515792" id="t-515792" style="box-sizing: border-box;">So Git is my second big project,</span> <span class="talk-transcript__fragment" data-time="518268" id="t-518268" style="box-sizing: border-box;">which was only created for me to maintain my first big project.</span> <span class="talk-transcript__fragment" data-time="523433" id="t-523433" style="box-sizing: border-box;">And this is literally how I work.</span> <span class="talk-transcript__fragment" data-time="525704" id="t-525704" style="box-sizing: border-box;">I don't code for --</span> <span class="talk-transcript__fragment" data-time="528233" id="t-528233" style="box-sizing: border-box;">well, I do code for fun --</span> <span class="talk-transcript__fragment" data-time="529979" id="t-529979" style="box-sizing: border-box;">but I want to code for something meaningful</span> <span class="talk-transcript__fragment" data-time="532384" id="t-532384" style="box-sizing: border-box;">so every single project I've ever done has been something I needed</span> <span class="talk-transcript__fragment" data-time="536455" id="t-536455" style="box-sizing: border-box;">and --</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">09:08</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="537855" id="t-537855" style="box-sizing: border-box;">CA: So really, both Linux and Git kind of arose</span> <span class="talk-transcript__fragment" data-time="541312" id="t-541312" style="box-sizing: border-box;">almost as an unintended consequence</span> <span class="talk-transcript__fragment" data-time="543672" id="t-543672" style="box-sizing: border-box;">of your desire not to have to work with too many people.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">09:17</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="546367" id="t-546367" style="box-sizing: border-box;">LT: Absolutely. Yes.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">09:18</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="547542" id="t-547542" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">09:19</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="548646" id="t-548646" style="box-sizing: border-box;">CA: That's amazing. LT: Yeah.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">09:21</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="550320" id="t-550320" style="box-sizing: border-box;">(Applause)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">09:22</data></div>
그리고 적어도 지금까지는, 토발즈씨는 기술업계를 한번만이 아니라 두번이나 바꾼 분이시고, 우리도 그걸 시도해보고 왜 그게 가능했는지 이해해야 하겠습니다. 몇가지 단서는 주셨습니다만, 그렇지만 ... 어린아이 때 토발즈 씨의, 루빅 큐브를 가지고 찍힌 사진이 여기 있습니다. 토발즈 씨는 10살이나 11살 무렵부터 삶의 절반을 프로그래밍으로 보냈다고 이야기 하셨는데요.<br />
<br />
그런 종류의 컴퓨터 천재였나요, 있잖아요, 동네짱인 모범생, 학교에서 뭐든 할 수 있는 스타였나요? 아이 땐 어땠어요?<br />
<br />
LT: 예, 제 생각에 전 전형적인 모범생이었던 것 같아요. 제 말은, 저는 ... 전 그때 사교적인 사람이 아니었습니다. 저건 제 남동생인데요. 전 분명히 제 남동생보다 루빅 큐브에 관심이 있었던 것 같네요.<br />
<br />
(웃음)<br />
<br />
제 여동생은, 이 사진에는 없지만, 우리가 가족 모임에서 만났던 적 있어요 -- 저희 가족은 대가족은 아닌데, 사촌이 몇 있어요 -- 여동생은 그전에 절 준비하려 하더군요. 말하자면, 제가 방에 들어가기 전에 그녀는 말하려 했죠, "좋아. 그렇게 그렇게 ..." 왜냐면 전 그러지 않았으니까요 -- 전 괴짜였습니다. 전 컴퓨터에, 수학에, 물리학에 빠져 있었죠. 그것들은 잘 했어요. 전 제가 특별히 예외적인 존재라고는 생각하지 않아요. 분명히, 제 여동생은 제 가장 커다란 예외적인 특징은 제가 집 밖에 잘 나가려 하질 않는 거라고 하더군요.<br />
<br />
(웃음)<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="551836" id="t-551836" style="box-sizing: border-box;">And yet, you're the man who's transformed technology</span> <span class="talk-transcript__fragment" data-time="555251" id="t-555251" style="box-sizing: border-box;">not just once but twice,</span> <span class="talk-transcript__fragment" data-time="556592" id="t-556592" style="box-sizing: border-box;">and we have to try and understand why it is.</span> <span class="talk-transcript__fragment" data-time="559199" id="t-559199" style="box-sizing: border-box;">You've given us some clues, but ...</span> <span class="talk-transcript__fragment" data-time="560907" id="t-560907" style="box-sizing: border-box;">Here's a picture of you as a kid, with a Rubik's Cube.</span> <span class="talk-transcript__fragment" data-time="565572" id="t-565572" style="box-sizing: border-box;">You mentioned that you've been programming since you were like 10 or 11,</span> <span class="talk-transcript__fragment" data-time="569716" id="t-569716" style="box-sizing: border-box;">half your life.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">09:42</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="571105" id="t-571105" style="box-sizing: border-box;">Were you this sort of computer genius, you know, übernerd,</span> <span class="talk-transcript__fragment" data-time="574945" id="t-574945" style="box-sizing: border-box;">were you the star at school who could do everything?</span> <span class="talk-transcript__fragment" data-time="577454" id="t-577454" style="box-sizing: border-box;">What were you like as a kid?</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">09:51</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="580130" id="t-580130" style="box-sizing: border-box;">LT: Yeah, I think I was the prototypical nerd.</span> <span class="talk-transcript__fragment" data-time="582647" id="t-582647" style="box-sizing: border-box;">I mean, I was ...</span> <span class="talk-transcript__fragment" data-time="585130" id="t-585130" style="box-sizing: border-box;">I was not a people person back then.</span> <span class="talk-transcript__fragment" data-time="587116" id="t-587116" style="box-sizing: border-box;">That's my younger brother.</span> <span class="talk-transcript__fragment" data-time="589720" id="t-589720" style="box-sizing: border-box;">I was clearly more interested in the Rubik's Cube</span> <span class="talk-transcript__fragment" data-time="592531" id="t-592531" style="box-sizing: border-box;">than my younger brother.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">10:05</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="594080" id="t-594080" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">10:06</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="595191" id="t-595191" style="box-sizing: border-box;">My younger sister, who's not in the picture,</span> <span class="talk-transcript__fragment" data-time="598335" id="t-598335" style="box-sizing: border-box;">when we had family meetings --</span> <span class="talk-transcript__fragment" data-time="600773" id="t-600773" style="box-sizing: border-box;">and it's not a huge family, but I have, like, a couple of cousins --</span> <span class="talk-transcript__fragment" data-time="604589" id="t-604589" style="box-sizing: border-box;">she would prep me beforehand.</span> <span class="talk-transcript__fragment" data-time="607477" id="t-607477" style="box-sizing: border-box;">Like, before I stepped into the room she would say,</span> <span class="talk-transcript__fragment" data-time="610067" id="t-610067" style="box-sizing: border-box;">"OK. That's so-and-so ..."</span> <span class="talk-transcript__fragment" data-time="613925" id="t-613925" style="box-sizing: border-box;">Because I was not --</span> <span class="talk-transcript__fragment" data-time="616278" id="t-616278" style="box-sizing: border-box;">I was a geek.</span> <span class="talk-transcript__fragment" data-time="617517" id="t-617517" style="box-sizing: border-box;">I was into computers,</span><span class="talk-transcript__fragment" data-time="618707" id="t-618707" style="box-sizing: border-box;">I was into math,</span> <span class="talk-transcript__fragment" data-time="619890" id="t-619890" style="box-sizing: border-box;">I was into physics.</span> <span class="talk-transcript__fragment" data-time="621065" id="t-621065" style="box-sizing: border-box;">I was good at that.</span> <span class="talk-transcript__fragment" data-time="622240" id="t-622240" style="box-sizing: border-box;">I don't think I was particularly exceptional.</span><span class="talk-transcript__fragment" data-time="625554" id="t-625554" style="box-sizing: border-box;">Apparently, my sister said</span> <span class="talk-transcript__fragment" data-time="627969" id="t-627969" style="box-sizing: border-box;">that my biggest exceptional quality was that I would not let go.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">10:46</data></div>
CA: 좋아요, 그거 재밌는데, 그 이야기를 좀 더 하죠. 토발즈씨는 집밖에 나가려 하지 않았다. 그건 괴짜거나 똑똑해서가 아니라, 그건 ... 끈질긴 거 아닌가요?<br />
<br />
LT: 끈질긴 게 맞겠죠. 그건 뭔가를 시작하고는 이렇게 말하지 않는거죠, "좋아, 난 다 했어, 뭔가 다른 걸 하자 -- 봐봐, 저거 반짝인다!"<br />
<br />
그리고 전 제 삶의 다른 부분에서도 그런 부분이 많은 것을 알고 있습니다. 전 7년을 실리콘 밸리에서 살았습니다. 그리고 전 실리콘 밸리의 같은 회사에서 그 모든 시간을 일했습니다. 이건 듣도보도 못한 일입니다. 이건 실리콘 밸리가 하는 방법이 아니예요. 실리콘 밸리의 포인트는 사람들이 직업들을 바꿔가면서 냄비의 내용물들을 섞어가는 거죠. 그리고 저는 그런 타입이 아닙니다.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="635618" id="t-635618" style="box-sizing: border-box;">CA: OK, so let's go there, because that's interesting.</span> <span class="talk-transcript__fragment" data-time="638199" id="t-638199" style="box-sizing: border-box;">You would not let go.</span> <span class="talk-transcript__fragment" data-time="639397" id="t-639397" style="box-sizing: border-box;">So that's not about being a geek and being smart,</span> <span class="talk-transcript__fragment" data-time="642286" id="t-642286" style="box-sizing: border-box;">that's about being ... stubborn?</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">10:56</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="645415" id="t-645415" style="box-sizing: border-box;">LT: That's about being stubborn.</span> <span class="talk-transcript__fragment" data-time="646966" id="t-646966" style="box-sizing: border-box;">That's about, like,</span> <span class="talk-transcript__fragment" data-time="649093" id="t-649093" style="box-sizing: border-box;">just starting something</span> <span class="talk-transcript__fragment" data-time="651317" id="t-651317" style="box-sizing: border-box;">and not saying, "OK, I'm done, let's do something else --</span> <span class="talk-transcript__fragment" data-time="656791" id="t-656791" style="box-sizing: border-box;">Look: shiny!"</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">11:09</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="658954" id="t-658954" style="box-sizing: border-box;">And I notice that in many other parts in my life, too.</span> <span class="talk-transcript__fragment" data-time="663470" id="t-663470" style="box-sizing: border-box;">I lived in Silicon Valley for seven years.</span> <span class="talk-transcript__fragment" data-time="666744" id="t-666744" style="box-sizing: border-box;">And I worked for the same company, in Silicon Valley,</span> <span class="talk-transcript__fragment" data-time="670880" id="t-670880" style="box-sizing: border-box;">for the whole time.</span> <span class="talk-transcript__fragment" data-time="672618" id="t-672618" style="box-sizing: border-box;">That is unheard of.</span> <span class="talk-transcript__fragment" data-time="675204" id="t-675204" style="box-sizing: border-box;">That's not how Silicon Valley works.</span> <span class="talk-transcript__fragment" data-time="676995" id="t-676995" style="box-sizing: border-box;">The whole point of Silicon Valley is that people jump between jobs</span> <span class="talk-transcript__fragment" data-time="680598" id="t-680598" style="box-sizing: border-box;">to kind of mix up the pot.</span><span class="talk-transcript__fragment" data-time="683249" id="t-683249" style="box-sizing: border-box;">And that's not the kind of person I am.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">11:36</data></div>
CA: 하지만 리눅스의 실제 개발에 있어서, 그런 끈질김이 가끔은 다른 사람들과 충돌을 일으킵니다. 그에 대해 좀 이야기하죠. 그건 프로그램의 품질을 관리하기 위해 해야만 하는 필수적인 것이었나요? 그에 대해 뭐가 일어났는지 어떻게 설명해 주시겠습니까?<br />
<br />
LT: 그게 필수적인지 어떤지는 전 몰라요. 다시 말하지만 "전 사교적인 사람이 아닙니다" -- 가끔은 저 역시 ...다른 사람의 기분에 있어서는 "근시안"적이 되고, 그게 가끔은 다른 사람을 다치게 하는 말을 뱉게 만듭니다. 그리고 전 그게 자랑스럽지 않아요.<br />
<br />
(박수)<br />
<br />
하지만, 동시에, 그건 -- 전 가끔 제게 좀 친절하게 굴라고 말하는 사람들을 만나게 되는데요. 그리고 나서 이제 제가 당신은 친절하네요, 또는 당신은 좀 더 적극적이어야 해요, 라고 설명을 하려 하면, 그사람들은 제가 친절하지 않다고 보더군요.<br />
<br />
(웃음)<br />
<br />
제가 말하고자 하는건 우리가 다르다는 것입니다. 전 사교적인 사람이 아닙니다; 그건 제가 특별히 자랑스러워 하는 건 아닙니다만, 제 일부분입니다. 그리고 제가 오픈소스와 관련해 정말 좋아하는 것은 다른 사람들이 함께 일하도록 한다는 것입니다. 우린 서로를 좋아해야만 하는게 아닙니다 -- 그리고 가끔은 우린 정말로 서로를 좋아하지 않습니다. 정말로요 -- 제 말은, 정말, 정말 가열차게 되는 논쟁들이 있습니다. 하지만 여러분은, 정말로, 여러분이 동의하지 않는데조차도 동의하지 않는다 해도, 그건 당신이 정말 다른 것에 흥미가 있다는 것입니다.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="685153" id="t-685153" style="box-sizing: border-box;">CA: But during the actual development of Linux itself,</span> <span class="talk-transcript__fragment" data-time="687748" id="t-687748" style="box-sizing: border-box;">that stubbornness sometimes brought you in conflict with other people.</span> <span class="talk-transcript__fragment" data-time="692445" id="t-692445" style="box-sizing: border-box;">Talk about that a bit.</span> <span class="talk-transcript__fragment" data-time="694123" id="t-694123" style="box-sizing: border-box;">Was that essential to sort of maintain the quality of what was being built?</span> <span class="talk-transcript__fragment" data-time="699691" id="t-699691" style="box-sizing: border-box;">How would you describe what happened?</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">11:53</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="702392" id="t-702392" style="box-sizing: border-box;">LT: I don't know if it's essential.</span> <span class="talk-transcript__fragment" data-time="705239" id="t-705239" style="box-sizing: border-box;">Going back to the "I'm not a people person," --</span> <span class="talk-transcript__fragment" data-time="708408" id="t-708408" style="box-sizing: border-box;">sometimes I'm also ...</span><span class="talk-transcript__fragment" data-time="712100" id="t-712100" style="box-sizing: border-box;">shall we say,</span> <span class="talk-transcript__fragment" data-time="713657" id="t-713657" style="box-sizing: border-box;">"myopic" when it comes to other people's feelings,</span> <span class="talk-transcript__fragment" data-time="717667" id="t-717667" style="box-sizing: border-box;">and that sometimes makes you say things that hurt other people.</span> <span class="talk-transcript__fragment" data-time="722969" id="t-722969" style="box-sizing: border-box;">And I'm not proud of that.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">12:17</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="726761" id="t-726761" style="box-sizing: border-box;">(Applause)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">12:18</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="727899" id="t-727899" style="box-sizing: border-box;">But, at the same time, it's --</span> <span class="talk-transcript__fragment" data-time="730978" id="t-730978" style="box-sizing: border-box;">I get people who tell me that I should be nice.</span> <span class="talk-transcript__fragment" data-time="734796" id="t-734796" style="box-sizing: border-box;">And then when I try to explain to them that maybe you're nice,</span> <span class="talk-transcript__fragment" data-time="740488" id="t-740488" style="box-sizing: border-box;">maybe you should be more aggressive,</span> <span class="talk-transcript__fragment" data-time="742766" id="t-742766" style="box-sizing: border-box;">they see that as me being not nice.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">12:37</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="746332" id="t-746332" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">12:39</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="748466" id="t-748466" style="box-sizing: border-box;">What I'm trying to say is we are different.</span> <span class="talk-transcript__fragment" data-time="750658" id="t-750658" style="box-sizing: border-box;">I'm not a people person;</span> <span class="talk-transcript__fragment" data-time="752492" id="t-752492" style="box-sizing: border-box;">it's not something I'm particularly proud of,</span> <span class="talk-transcript__fragment" data-time="754622" id="t-754622" style="box-sizing: border-box;">but it's part of me.</span> <span class="talk-transcript__fragment" data-time="756186" id="t-756186" style="box-sizing: border-box;">And one of the things I really like about open source</span> <span class="talk-transcript__fragment" data-time="758915" id="t-758915" style="box-sizing: border-box;">is it really allows different people to work together.</span> <span class="talk-transcript__fragment" data-time="764731" id="t-764731" style="box-sizing: border-box;">We don't have to like each other --</span> <span class="talk-transcript__fragment" data-time="766479" id="t-766479" style="box-sizing: border-box;">and sometimes we really don't like each other.</span> <span class="talk-transcript__fragment" data-time="768706" id="t-768706" style="box-sizing: border-box;">Really -- I mean, there are very, very heated arguments.</span> <span class="talk-transcript__fragment" data-time="772217" id="t-772217" style="box-sizing: border-box;">But you can, actually, you can find things that --</span> <span class="talk-transcript__fragment" data-time="776327" id="t-776327" style="box-sizing: border-box;">you don't even agree to disagree,</span> <span class="talk-transcript__fragment" data-time="778578" id="t-778578" style="box-sizing: border-box;">it's just that you're interested in really different things.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">13:12</data></div>
그리고 제가 상업적 사람들이 작업물로 이득을 보는 것에 대해 걱정이 되었다고 이야기했던 지점으로 돌아가서, 그런 상업적인 사람들은 매우 매우 사랑스렁누 사람들이었음이 드러났습니다, 정말로 빨리 드러났습니다. 그리고 그들은 제가 전혀 할 흥미가 없었던 일들을 모두 해줬고, 그들은 완전 다른 목표를 가지고 있었습니다. 그리고 그들은 오픈소스를 제가 원하지 않던 방향으로 사용했습니다. 하지만 그건 오픈소스이기에 그들은 그렇게 할 수 있었고, 함께 정말 아름답게 동작합니다.<br />
<br />
그리고 전 정말로 그것은 그렇다고 생각합니다. 여러분도 사교적인 사람들, 소통을 하는 사람들을 가져야 합니다, 따뜻하고 친근한 --<br />
<br />
(웃음)<br />
<br />
당신을 껴안고 커뮤니티로 이끌어줄 그런 사람 말이죠. 하지만 모두가 그런건 아닙니다. 그리고 전 그런 사람이 아닙니다. 전 기술에 관심이 있습니다. UI 에 관심 있는 사람들도 있습니다. 전 제 삶을 위해 UI를 할 수는 없습니다. 제말은, 만약 제가 어떤 섬에 고립되었고 그 섬을 떠나는 방법이 예쁜 UI 를 만드는 것이라면, 전 그냥 거기서 죽을래요.<br />
<br />
(웃음)<br />
<br />
그러니 세상엔 다른 종류의 사람들이 있고, 전 용서를 비는게 아니라, 설명을 하려 합니다.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="781648" id="t-781648" style="box-sizing: border-box;">And coming back to the point where I said earlier</span> <span class="talk-transcript__fragment" data-time="784575" id="t-784575" style="box-sizing: border-box;">that I was afraid of commercial people taking advantage of your work,</span> <span class="talk-transcript__fragment" data-time="788892" id="t-788892" style="box-sizing: border-box;">it turned out, and very quickly turned out,</span> <span class="talk-transcript__fragment" data-time="791515" id="t-791515" style="box-sizing: border-box;">that those commercial people were lovely, lovely people.</span> <span class="talk-transcript__fragment" data-time="794505" id="t-794505" style="box-sizing: border-box;">And they did all the things that I was not at all interested in doing,</span> <span class="talk-transcript__fragment" data-time="798235" id="t-798235" style="box-sizing: border-box;">and they had completely different goals.</span> <span class="talk-transcript__fragment" data-time="800316" id="t-800316" style="box-sizing: border-box;">And they used open source in ways that I just did not want to go.</span> <span class="talk-transcript__fragment" data-time="805663" id="t-805663" style="box-sizing: border-box;">But because it was open source they could do it,</span> <span class="talk-transcript__fragment" data-time="807949" id="t-807949" style="box-sizing: border-box;">and it actually works really beautifully together.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">13:41</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="810325" id="t-810325" style="box-sizing: border-box;">And I actually think it works the same way.</span> <span class="talk-transcript__fragment" data-time="812373" id="t-812373" style="box-sizing: border-box;">You need to have the people-people, the communicators,</span> <span class="talk-transcript__fragment" data-time="815602" id="t-815602" style="box-sizing: border-box;">the warm and friendly people</span> <span class="talk-transcript__fragment" data-time="817053" id="t-817053" style="box-sizing: border-box;">who like --</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">13:49</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="818799" id="t-818799" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">13:51</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="820265" id="t-820265" style="box-sizing: border-box;">really want to hug you and get you into the community.</span> <span class="talk-transcript__fragment" data-time="823339" id="t-823339" style="box-sizing: border-box;">But that's not everybody.</span> <span class="talk-transcript__fragment" data-time="824934" id="t-824934" style="box-sizing: border-box;">And that's not me.</span> <span class="talk-transcript__fragment" data-time="826390" id="t-826390" style="box-sizing: border-box;">I care about the technology.</span> <span class="talk-transcript__fragment" data-time="827871" id="t-827871" style="box-sizing: border-box;">There are people who care about the UI.</span> <span class="talk-transcript__fragment" data-time="829776" id="t-829776" style="box-sizing: border-box;">I can't do UI to save my life.</span> <span class="talk-transcript__fragment" data-time="832870" id="t-832870" style="box-sizing: border-box;">I mean, if I was stranded on an island</span> <span class="talk-transcript__fragment" data-time="835915" id="t-835915" style="box-sizing: border-box;">and the only way to get off that island was the make a pretty UI,</span> <span class="talk-transcript__fragment" data-time="839339" id="t-839339" style="box-sizing: border-box;">I'd die there.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">14:11</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="840526" id="t-840526" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">14:12</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="841701" id="t-841701" style="box-sizing: border-box;">So there's different kinds of people,</span> <span class="talk-transcript__fragment" data-time="843864" id="t-843864" style="box-sizing: border-box;">and I'm not making excuses, I'm trying to explain.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">14:17</data></div>
CA: 자, 우리가 지난주에 이야기를 했을 때, 토발즈 씨는 가지고 있는 다른 특성들에 대해서도 이야기 했는데, 전 그게 참 흥미로웠습니다. 취향이라는 것이죠.<br />
<br />
그리고 제가 여기 두개의 이미지를 가져왔습니다. 제 생각에 이건 코드에 있어 특별히 좋은 취향이 아닌 것의 예가 될 것이고, 이건 나은 취향이라 생각됩니다, 지금 보이는게요. 이 두 코드 사이의 차이점이 뭔가요?<br />
<br />
LT: 그러니까 이건 -- 여기 얼마나 많은 분들이 실제로 코드를 짜보셨나요?<br />
<br />
CA: 오 세상에.<br />
<br />
LT: 지금 손을 드신 분들이라면, 단일 링크드 리스트라 불리는 것을 해보셨을 거라고 봅니다. 그리고 그건 가르침이죠 -- 이건, 매우 좋은 취향은 아닌 첫번째의 것은, 여러분이 코딩을 시작했을 때 배우는 방식입니다. 그리고 코드를 이해할 필요는 없어요.<br />
<br />
제게 가장 흥미로운 부분은 저 마지막의 if 문입니다. 단일 링크드 리스트에서는 -- 이 코드는 리스트에서 존재하는 원소 하나를 제거하려 하는데요 -- 만약 제거하려는 원소가 첫번째 원소이거나 중간에 있는 원소이거나 하는 것에 따른 차이가 존재합니다. 그게 첫번째 원소라면, 첫번째 원소로의 포인터를 바꿔야 합니다. 그게 중간에 있었다면, 그 앞의 원소의 포인터를 수정해야 합니다. 그러니 그 두가지는 완전 다른 케이스인 것이죠.<br />
<br />
CA: 그리고 이게 더 나은 것이죠.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="846753" id="t-846753" style="box-sizing: border-box;">CA: Now, when we talked last week,</span> <span class="talk-transcript__fragment" data-time="848443" id="t-848443" style="box-sizing: border-box;">you talked about some other trait that you have,</span> <span class="talk-transcript__fragment" data-time="850952" id="t-850952" style="box-sizing: border-box;">which I found really interesting.</span> <span class="talk-transcript__fragment" data-time="852567" id="t-852567" style="box-sizing: border-box;">It's this idea called taste.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">14:24</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="853974" id="t-853974" style="box-sizing: border-box;">And I've just got a couple of images here.</span> <span class="talk-transcript__fragment" data-time="856354" id="t-856354" style="box-sizing: border-box;">I think this is an example of not particularly good taste in code,</span><span class="talk-transcript__fragment" data-time="860381" id="t-860381" style="box-sizing: border-box;">and this one is better taste,</span> <span class="talk-transcript__fragment" data-time="863396" id="t-863396" style="box-sizing: border-box;">which one can immediately see.</span> <span class="talk-transcript__fragment" data-time="865483" id="t-865483" style="box-sizing: border-box;">What is the difference between these two?</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">14:39</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="868639" id="t-868639" style="box-sizing: border-box;">LT: So this is --</span> <span class="talk-transcript__fragment" data-time="869845" id="t-869845" style="box-sizing: border-box;">How many people here actually have coded?</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">14:44</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="873671" id="t-873671" style="box-sizing: border-box;">CA: Oh my goodness.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">14:46</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="875215" id="t-875215" style="box-sizing: border-box;">LT: So I guarantee you,</span> <span class="talk-transcript__fragment" data-time="876394" id="t-876394" style="box-sizing: border-box;">everybody who raised their hand,</span> <span class="talk-transcript__fragment" data-time="877963" id="t-877963" style="box-sizing: border-box;">they have done what's called a singly-linked list.</span><span class="talk-transcript__fragment" data-time="880608" id="t-880608" style="box-sizing: border-box;">And it's taught --</span> <span class="talk-transcript__fragment" data-time="883115" id="t-883115" style="box-sizing: border-box;">This, the first not very good taste approach,</span> <span class="talk-transcript__fragment" data-time="886730" id="t-886730" style="box-sizing: border-box;">is basically how it's taught to be done when you start out coding.</span> <span class="talk-transcript__fragment" data-time="890821" id="t-890821" style="box-sizing: border-box;">And you don't have to understand the code.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">15:03</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="892889" id="t-892889" style="box-sizing: border-box;">The most interesting part to me</span> <span class="talk-transcript__fragment" data-time="894969" id="t-894969" style="box-sizing: border-box;">is the last if statement.</span> <span class="talk-transcript__fragment" data-time="898933" id="t-898933" style="box-sizing: border-box;">Because what happens in a singly-linked list --</span><span class="talk-transcript__fragment" data-time="901217" id="t-901217" style="box-sizing: border-box;">this is trying to remove an existing entry from a list --</span> <span class="talk-transcript__fragment" data-time="904891" id="t-904891" style="box-sizing: border-box;">and there's a difference between if it's the first entry</span><span class="talk-transcript__fragment" data-time="908757" id="t-908757" style="box-sizing: border-box;">or whether it's an entry in the middle.</span> <span class="talk-transcript__fragment" data-time="910780" id="t-910780" style="box-sizing: border-box;">Because if it's the first entry,</span> <span class="talk-transcript__fragment" data-time="912409" id="t-912409" style="box-sizing: border-box;">you have to change the pointer to the first entry.</span> <span class="talk-transcript__fragment" data-time="915449" id="t-915449" style="box-sizing: border-box;">If it's in the middle,</span> <span class="talk-transcript__fragment" data-time="916671" id="t-916671" style="box-sizing: border-box;">you have to change the pointer of a previous entry.</span> <span class="talk-transcript__fragment" data-time="919116" id="t-919116" style="box-sizing: border-box;">So they're two completely different cases.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">15:32</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="921164" id="t-921164" style="box-sizing: border-box;">CA: And that's better.</span></span></div>
LT: 네, 이게 더 나은 것입니다. 여기엔 그 if 문이 없습니다. 그리고 그건 실제로는 중요치 않습니다 -- 여러분이 왜 여기엔 if 문이 없는지 이해하길 원하는 건 아닙니다, 다만 저는 여러분이 가끔은 문제를 다른 시각으로 바라볼 수 있고 그걸 특별 케이스가 사라지고 일반적인 케이스가 되도록 다시 써볼 수 있음을 이해하셨으면 합니다. 그리고 그게 좋은 코드입니다. 하지만 이건 간단한 코드입니다. 컴퓨터과학 입문 같은 거죠. 이게 중요한 건 아닙니다 -- 물론 디테일은 중요하지만요.<br />
<br />
제게 있어서, 제가 함께 일하고 싶은 사람들의 표시는 그들은 좋은 취향을 가졌다는 겁니다, 어떤 거냐면 ... 전 여러분에게 이 간단한 예를 들었는데 이것들은 너무 작아서 적합하지 않습니다. 좋은 취향은 이것보단 훨씬 큽니다. 좋은 취향은 커다란 패턴을 실제로 보고 본능적으로 어떻게 하는 것이 옳은 방법인지를 아는 것입니다.<br />
<br />
CA: 좋아요, 이제 조각들이 모두 준비된 것 같군요. 토발즈씨는 취향을 가지고 있는데, 소프트웨어쪽 사람들에게 의미있는 방향의 취향이군요. 당신은 --<br />
<br />
(웃음)<br />
<br />
LT: 전 여기 계신 분들 중 일부에게도 의미 있다고 생각해요.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">15:33</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="922340" id="t-922340" style="box-sizing: border-box;">LT: And this is better.</span> <span class="talk-transcript__fragment" data-time="923940" id="t-923940" style="box-sizing: border-box;">It does not have the if statement.</span> <span class="talk-transcript__fragment" data-time="926637" id="t-926637" style="box-sizing: border-box;">And it doesn't really matter --</span> <span class="talk-transcript__fragment" data-time="928874" id="t-928874" style="box-sizing: border-box;">I don't want you understand why it doesn't have the if statement,</span> <span class="talk-transcript__fragment" data-time="932099" id="t-932099" style="box-sizing: border-box;">but I want you to understand</span> <span class="talk-transcript__fragment" data-time="933465" id="t-933465" style="box-sizing: border-box;">that sometimes you can see a problem in a different way</span> <span class="talk-transcript__fragment" data-time="936114" id="t-936114" style="box-sizing: border-box;">and rewrite it so that a special case goes away</span> <span class="talk-transcript__fragment" data-time="939492" id="t-939492" style="box-sizing: border-box;">and becomes the normal case.</span> <span class="talk-transcript__fragment" data-time="941393" id="t-941393" style="box-sizing: border-box;">And that's good code.</span> <span class="talk-transcript__fragment" data-time="943328" id="t-943328" style="box-sizing: border-box;">But this is simple code.</span> <span class="talk-transcript__fragment" data-time="944902" id="t-944902" style="box-sizing: border-box;">This is CS 101.</span> <span class="talk-transcript__fragment" data-time="946275" id="t-946275" style="box-sizing: border-box;">This is not important -- although, details are important.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">16:00</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="949798" id="t-949798" style="box-sizing: border-box;">To me, the sign of people I really want to work with</span> <span class="talk-transcript__fragment" data-time="953900" id="t-953900" style="box-sizing: border-box;">is that they have good taste, which is how ...</span> <span class="talk-transcript__fragment" data-time="957295" id="t-957295" style="box-sizing: border-box;">I sent you this stupid example</span> <span class="talk-transcript__fragment" data-time="958916" id="t-958916" style="box-sizing: border-box;">that is not relevant because it's too small.</span> <span class="talk-transcript__fragment" data-time="961743" id="t-961743" style="box-sizing: border-box;">Good taste is much bigger than this.</span><span class="talk-transcript__fragment" data-time="963909" id="t-963909" style="box-sizing: border-box;">Good taste is about really seeing the big patterns</span> <span class="talk-transcript__fragment" data-time="967954" id="t-967954" style="box-sizing: border-box;">and kind of instinctively knowing what's the right way to do things.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">16:23</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="972436" id="t-972436" style="box-sizing: border-box;">CA: OK, so we're putting the pieces together here now.</span> <span class="talk-transcript__fragment" data-time="975736" id="t-975736" style="box-sizing: border-box;">You have taste,</span> <span class="talk-transcript__fragment" data-time="978057" id="t-978057" style="box-sizing: border-box;">in a way that's meaningful to software people.</span> <span class="talk-transcript__fragment" data-time="980418" id="t-980418" style="box-sizing: border-box;">You're --</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">16:32</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="981593" id="t-981593" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">16:34</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="983433" id="t-983433" style="box-sizing: border-box;">LT: I think it was meaningful to some people here.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">16:38</data></div>
CA: 토발즈씨는 매우 똑똑한 컴퓨터 코더입니다, 그리고 엄청나게 끈질기죠. 하지만 그 외에도 뭔가 더 있을 거예요. 제말은, 토발즈씨는 미래를 바꿨어요. 분명 이런 거대한 미래를 내다보는 능력을 가지고 있을 거예요. 토발즈씨는 선지자입니다, 맞나요?<br />
<br />
LT: 전 사실 지난 이틀동안 TED 에서 좀 불편함을 느꼈는데, 진행되고 있는 비전들이 많이 있었기 때문입니다, 맞죠? 그리고 전 선지자가 아닙니다. 전 향후 5년간의 계획이 없어요. 전 엔지니어입니다. 그리고 전 그건 정말로 -- 제 말은 -- 전 걸어다니고 구름을 바라보고 별을 바라보며 "저기 가고 싶다" 말하는 사람들과도 함께함에 정말 행복합니다. 하지만 전 땅을 보고 있고 제 바로 앞에 있는 구멍을 제가 떨어지기 전에 고치고 싶습니다. 이게 저라는 사람의 부류입니다.<br />
<br />
(환호)<br />
<br />
(박수)<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="987967" id="t-987967" style="box-sizing: border-box;">CA: You're a very smart computer coder,</span> <span class="talk-transcript__fragment" data-time="990908" id="t-990908" style="box-sizing: border-box;">and you're hellish stubborn.</span> <span class="talk-transcript__fragment" data-time="993622" id="t-993622" style="box-sizing: border-box;">But there must be something else.</span> <span class="talk-transcript__fragment" data-time="995232" id="t-995232" style="box-sizing: border-box;">I mean, you've changed the future.</span> <span class="talk-transcript__fragment" data-time="996879" id="t-996879" style="box-sizing: border-box;">You must have the ability of these grand visions of the future.</span> <span class="talk-transcript__fragment" data-time="999866" id="t-999866" style="box-sizing: border-box;">You're a visionary, right?</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">16:52</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1001151" id="t-1001151" style="box-sizing: border-box;">LT: I've actually felt slightly uncomfortable at TED</span> <span class="talk-transcript__fragment" data-time="1003766" id="t-1003766" style="box-sizing: border-box;">for the last two days,</span> <span class="talk-transcript__fragment" data-time="1005950" id="t-1005950" style="box-sizing: border-box;">because there's a lot of vision going on, right?</span> <span class="talk-transcript__fragment" data-time="1008569" id="t-1008569" style="box-sizing: border-box;">And I am not a visionary.</span> <span class="talk-transcript__fragment" data-time="1010290" id="t-1010290" style="box-sizing: border-box;">I do not have a five-year plan.</span> <span class="talk-transcript__fragment" data-time="1012543" id="t-1012543" style="box-sizing: border-box;">I'm an engineer.</span> <span class="talk-transcript__fragment" data-time="1013925" id="t-1013925" style="box-sizing: border-box;">And I think it's really --</span> <span class="talk-transcript__fragment" data-time="1015209" id="t-1015209" style="box-sizing: border-box;">I mean -- I'm perfectly happy with all the people</span> <span class="talk-transcript__fragment" data-time="1017552" id="t-1017552" style="box-sizing: border-box;">who are walking around and just staring at the clouds</span> <span class="talk-transcript__fragment" data-time="1020327" id="t-1020327" style="box-sizing: border-box;">and looking at the stars and saying, "I want to go there."</span> <span class="talk-transcript__fragment" data-time="1023202" id="t-1023202" style="box-sizing: border-box;">But I'm looking at the ground,</span> <span class="talk-transcript__fragment" data-time="1024678" id="t-1024678" style="box-sizing: border-box;">and I want to fix the pothole that's right in front of me</span> <span class="talk-transcript__fragment" data-time="1027557" id="t-1027557" style="box-sizing: border-box;">before I fall in.</span> <span class="talk-transcript__fragment" data-time="1028941" id="t-1028941" style="box-sizing: border-box;">This is the kind of person I am.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">17:21</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1030584" id="t-1030584" style="box-sizing: border-box;">(Cheers)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">17:22</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1031719" id="t-1031719" style="box-sizing: border-box;">(Applause)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">17:24</data></div>
CA: 그리고 지난주에 제게 두사람에 대해 이야기 하셨죠. 어떤 사람들이고 어떻게 토발즈씨가 그들과 관련되나요?<br />
<br />
LT: 글쎄요, 이건 기술업계에서 사용되는 일종의 클리셰인데, 테슬라 대 에디슨으로, 테슬라는 미래를 내다보는 과학자였고 대단한 아이디어를 가진 사람이었죠. 그리고 사람들은 테슬라를 좋아합니다. 그러니까, 자기 회사를 그사람 이름으로 지은 사람들도 있잖아요.<br />
<br />
(웃음)<br />
<br />
다른 쪽에 에디슨이 있는데, 이분은 실제로 종종 평범함으로 비방을 받고는 하는데 -- 제 말은, 이분의 가장 유명한 인용구죠, "천재는 1 펀센트의 영감과 99 퍼센트의 노력으로 만들어진다." 그리고 전 에디슨 쪽입니다, 사람들이 항상 그분을 싫어한다 해도요. 여러분이 실제로 두사람을 비교한다면, 테슬라는 오늘날 세상을 지배하는 것들을 마음속에 담아두고 있었지만, 누가 정말로 세상을 바꿨나요? 에디슨은 친절한 사람이 아니었을지 모르지만, 그분은 많은 것을 해냈습니다 -- 에디슨은 그렇게 똑똑하지는 않았을지도 모르고, 그다지 미래를 내다보지도 못했을지도 모릅니다. 하지만 전 저 자신은 테슬라보다는 에디슨에 가깝다고 생각합니다.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1033055" id="t-1033055" style="box-sizing: border-box;">CA: So you spoke to me last week about these two guys.</span> <span class="talk-transcript__fragment" data-time="1037358" id="t-1037358" style="box-sizing: border-box;">Who are they and how do you relate to them?</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">17:31</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1040239" id="t-1040239" style="box-sizing: border-box;">LT: Well, so this is kind of cliché in technology,</span> <span class="talk-transcript__fragment" data-time="1043865" id="t-1043865" style="box-sizing: border-box;">the whole Tesla versus Edison,</span> <span class="talk-transcript__fragment" data-time="1045896" id="t-1045896" style="box-sizing: border-box;">where Tesla is seen as the visionary scientist and crazy idea man.</span> <span class="talk-transcript__fragment" data-time="1050861" id="t-1050861" style="box-sizing: border-box;">And people love Tesla.</span> <span class="talk-transcript__fragment" data-time="1053667" id="t-1053667" style="box-sizing: border-box;">I mean, there are people who name their companies after him.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">17:47</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1056678" id="t-1056678" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">17:50</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1059365" id="t-1059365" style="box-sizing: border-box;">The other person there is Edison,</span> <span class="talk-transcript__fragment" data-time="1062001" id="t-1062001" style="box-sizing: border-box;">who is actually often vilified for being kind of pedestrian</span> <span class="talk-transcript__fragment" data-time="1065532" id="t-1065532" style="box-sizing: border-box;">and is --</span> <span class="talk-transcript__fragment" data-time="1067477" id="t-1067477" style="box-sizing: border-box;">I mean, his most famous quote is,</span> <span class="talk-transcript__fragment" data-time="1070223" id="t-1070223" style="box-sizing: border-box;">"Genius is one percent inspiration and 99 percent perspiration."</span> <span class="talk-transcript__fragment" data-time="1075394" id="t-1075394" style="box-sizing: border-box;">And I'm in the Edison camp,</span> <span class="talk-transcript__fragment" data-time="1076871" id="t-1076871" style="box-sizing: border-box;">even if people don't always like him.</span> <span class="talk-transcript__fragment" data-time="1079079" id="t-1079079" style="box-sizing: border-box;">Because if you actually compare the two,</span> <span class="talk-transcript__fragment" data-time="1082122" id="t-1082122" style="box-sizing: border-box;">Tesla has kind of this mind grab these days,</span> <span class="talk-transcript__fragment" data-time="1086679" id="t-1086679" style="box-sizing: border-box;">but who actually changed the world?</span> <span class="talk-transcript__fragment" data-time="1089853" id="t-1089853" style="box-sizing: border-box;">Edison may not have been a nice person,</span> <span class="talk-transcript__fragment" data-time="1093259" id="t-1093259" style="box-sizing: border-box;">he did a lot of things --</span> <span class="talk-transcript__fragment" data-time="1096415" id="t-1096415" style="box-sizing: border-box;">he was maybe not so intellectual,</span> <span class="talk-transcript__fragment" data-time="1098868" id="t-1098868" style="box-sizing: border-box;">not so visionary.</span> <span class="talk-transcript__fragment" data-time="1101119" id="t-1101119" style="box-sizing: border-box;">But I think I'm more of an Edison than a Tesla.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">18:36</data></div>
CA: 자, 이번주 TED 의 테마는 꿈입니다 -- 커다랗고, 과감하고, 대담한 꿈이요. 토발즈 씨는 사실 그에 대한 해독제 같군요.<br />
<br />
LT: 전 그걸 좀 끌어내리려 노력하죠, 맞아요.<br />
<br />
CA: 좋습니다.<br />
<br />
(웃음) 토발즈씨를 포용합니다, 포용해요.<br />
<br />
구글을 포함해 많은 회사들이 토발즈씨의 소프트웨어로부터 대략 수십억 달러를 벌어들이고 있습니다. 혹시 그게 얹짢지는 않나요?<br />
<br />
LT: 아뇨 아뇨, 몇가지 이유로 전혀 기분나쁘지 않습니다. 이유 중 하나는, 전 잘 지내고 있습니다. 정말 잘 지내고 있어요.<br />
<br />
하지만 다른 이유는 -- 그러니까, 이 모든 오픈소스를 하고 그렇게 일이 흘러가게 모든 것들을 두지 않았다면, 리눅스는 지금의 모습이 되지 못했을 겁니다. 그리고 그게 제가 정말로 좋아하지 않는, 공적 자리에서의 연설과 같은 경험을 가져왔지만 동시에, 이것도 경험입니다. 절 믿으세요. 그러니까, 절 매우 행복한 사람으로 만들어주는 많은 일들이 진행되고 있고 전 제가 옳은 선택을 했다고 생각합니다.<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1105669" id="t-1105669" style="box-sizing: border-box;">CA: So our theme at TED this week is dreams --</span> <span class="talk-transcript__fragment" data-time="1108131" id="t-1108131" style="box-sizing: border-box;">big, bold, audacious dreams.</span> <span class="talk-transcript__fragment" data-time="1109502" id="t-1109502" style="box-sizing: border-box;">You're really the antidote to that.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">18:42</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1111328" id="t-1111328" style="box-sizing: border-box;">LT: I'm trying to dial it down a bit, yes.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">18:44</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1113461" id="t-1113461" style="box-sizing: border-box;">CA: That's good.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">18:45</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1114636" id="t-1114636" style="box-sizing: border-box;">(Laughter)</span> <span class="talk-transcript__fragment" data-time="1115740" id="t-1115740" style="box-sizing: border-box;">We embrace you, we embrace you.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">18:50</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1119046" id="t-1119046" style="box-sizing: border-box;">Companies like Google and many others have made, arguably,</span> <span class="talk-transcript__fragment" data-time="1121819" id="t-1121819" style="box-sizing: border-box;">like, billions of dollars out of your software.</span> <span class="talk-transcript__fragment" data-time="1124049" id="t-1124049" style="box-sizing: border-box;">Does that piss you off?</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">18:56</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1125224" id="t-1125224" style="box-sizing: border-box;">LT: No.</span> <span class="talk-transcript__fragment" data-time="1126399" id="t-1126399" style="box-sizing: border-box;">No, it doesn't piss me off for several reasons.</span> <span class="talk-transcript__fragment" data-time="1129057" id="t-1129057" style="box-sizing: border-box;">And one of them is, I'm doing fine.</span> <span class="talk-transcript__fragment" data-time="1131091" id="t-1131091" style="box-sizing: border-box;">I'm really doing fine.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">19:03</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1132942" id="t-1132942" style="box-sizing: border-box;">But the other reason is --</span> <span class="talk-transcript__fragment" data-time="1134550" id="t-1134550" style="box-sizing: border-box;">I mean, without doing the whole open source and really letting go thing,</span> <span class="talk-transcript__fragment" data-time="1139901" id="t-1139901" style="box-sizing: border-box;">Linux would never have been what it is.</span> <span class="talk-transcript__fragment" data-time="1142151" id="t-1142151" style="box-sizing: border-box;">And it's brought experiences I don't really enjoy, public talking,</span> <span class="talk-transcript__fragment" data-time="1147271" id="t-1147271" style="box-sizing: border-box;">but at the same time, this is an experience.</span> <span class="talk-transcript__fragment" data-time="1149446" id="t-1149446" style="box-sizing: border-box;">Trust me.</span> <span class="talk-transcript__fragment" data-time="1151238" id="t-1151238" style="box-sizing: border-box;">So there's a lot of things going on that make me a very happy man</span> <span class="talk-transcript__fragment" data-time="1156405" id="t-1156405" style="box-sizing: border-box;">and thinking I did the right choices.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">19:29</data></div>
CA: 오픈 소스 아이디어가 -- 이게, 아무래도 이걸로 끝내야 할 것 같네요 -- 오픈소스 아이디어가 세계에 완전히 이해되고 있나요, 아니면 오픈소스가 더 나아갈 수 있는, 더 할 수 있는 일들이 있을까요?<br />
<br />
LT: 음, 두가지 생각을 가지고 있습니다. 전 오픈소스가 코드에서 잘 동작하는 이유는 마지막에 가서는, 코드는 흑백의 무엇이 되는 경향이 있습니다. 결정하기 충분히 좋은 방법이 있는데, 이건 올바르게 되었고 이건 그렇지 못하다 같은 것이죠. 코드는 동작하거나 아니거나인데, 이 말은 논쟁할 여지가 적다는 것입니다. 그리고 그럼에도 불구하고 우린 논쟁을 갖죠, 그렇죠? 다른 많은 영역들에서는 -- 음, 사람들이 공개 정책과 그런 것들에 대해 이야기 하죠 -- 가끔은 그런 다른 영역들에 대해서는, "맞아요, 그 똑같은 원칙을 다른 영역들에 적용해도 되요" 라고 말하기가 정말 어려운데, 그 흑과 백이 단순히 회색이 아니라 전혀 다른 색으로도 될 수 있기 때문입니다.<br />
<br />
자, 오픈소스는 과학에서는 분명한 만회를 하고 있습니다. 과학은 처음부터 오픈소스였습니다. 하지만 과학은 결국엔 상당히 폐쇄적이게 되었는데, 매우 비싼 저널들과 그런 것들로 인해서라고 볼 수 있죠. 그리고 오픈소스가 과학에 다시 돌아오고 있습니다. arXiv 와 공개 저널과 같은 걸 통해서죠. 위키피디아도 세상을 바꿨구요. 그러니 다른 예들이 여럿 있고, 여전히 여러 사례가 나타날 거라 확신합니다.<br />
<br />
CA: 하지만 당신은 선지자는 아니고 따라서 그것들의 이름을 짓는건 당신의 일이 아니군요.<br />
<br />
LT: 네, 제 일이 아니죠.<br />
<br />
(웃음)<br />
<br />
그걸 하는건 여러분의 역할이예요, 맞죠?<br />
<br />
CA: 바로 그렇죠.<br />
<br />
리누스 토발즈 씨, 리눅스와 인터넷과 모든 안드로이드 폰들에 감사를 드립니다.<br />
<br />
TED 에 와주셔서 본인에 대해 많은 것들을 말해 주셔서 감사합니다.<br />
<br />
LT: 감사합니다.<br />
<br />
(박수)<br />
<br />
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1158958" id="t-1158958" style="box-sizing: border-box;">CA: Is the open source idea --</span> <span class="talk-transcript__fragment" data-time="1160894" id="t-1160894" style="box-sizing: border-box;">this is, I think we'll end here --</span> <span class="talk-transcript__fragment" data-time="1162554" id="t-1162554" style="box-sizing: border-box;">is the open source idea fully realized now in the world,</span> <span class="talk-transcript__fragment" data-time="1166632" id="t-1166632" style="box-sizing: border-box;">or is there more that it could go,</span> <span class="talk-transcript__fragment" data-time="1169674" id="t-1169674" style="box-sizing: border-box;">are there more things that it could do?</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">19:43</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1172738" id="t-1172738" style="box-sizing: border-box;">LT: So, I'm of two minds there.</span> <span class="talk-transcript__fragment" data-time="1174996" id="t-1174996" style="box-sizing: border-box;">I think one reason open source works so well in code</span> <span class="talk-transcript__fragment" data-time="1179506" id="t-1179506" style="box-sizing: border-box;">is that at the end of the day,</span> <span class="talk-transcript__fragment" data-time="1181939" id="t-1181939" style="box-sizing: border-box;">code tends to be somewhat black and white.</span> <span class="talk-transcript__fragment" data-time="1185209" id="t-1185209" style="box-sizing: border-box;">There's often a fairly good way to decide,</span> <span class="talk-transcript__fragment" data-time="1189390" id="t-1189390" style="box-sizing: border-box;">this is done correctly and this is not done well.</span> <span class="talk-transcript__fragment" data-time="1193360" id="t-1193360" style="box-sizing: border-box;">Code either works or it doesn't,</span> <span class="talk-transcript__fragment" data-time="1195762" id="t-1195762" style="box-sizing: border-box;">which means that there's less room for arguments.</span> <span class="talk-transcript__fragment" data-time="1200394" id="t-1200394" style="box-sizing: border-box;">And we have arguments despite this, right?</span> <span class="talk-transcript__fragment" data-time="1204049" id="t-1204049" style="box-sizing: border-box;">In many other areas --</span> <span class="talk-transcript__fragment" data-time="1205988" id="t-1205988" style="box-sizing: border-box;">I mean, people have talked about open politics and things like that --</span> <span class="talk-transcript__fragment" data-time="1209753" id="t-1209753" style="box-sizing: border-box;">and it's really hard sometimes to say</span> <span class="talk-transcript__fragment" data-time="1212726" id="t-1212726" style="box-sizing: border-box;">that, yes, you can apply the same principles in some other areas</span> <span class="talk-transcript__fragment" data-time="1216507" id="t-1216507" style="box-sizing: border-box;">just because the black and white turns into not just gray,</span> <span class="talk-transcript__fragment" data-time="1221970" id="t-1221970" style="box-sizing: border-box;">but different colors.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">20:35</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1224339" id="t-1224339" style="box-sizing: border-box;">So, obviously open source in science is making a comeback.</span> <span class="talk-transcript__fragment" data-time="1228729" id="t-1228729" style="box-sizing: border-box;">Science was there first.</span> <span class="talk-transcript__fragment" data-time="1230387" id="t-1230387" style="box-sizing: border-box;">But then science ended up being pretty closed,</span> <span class="talk-transcript__fragment" data-time="1233078" id="t-1233078" style="box-sizing: border-box;">with very expensive journals and some of that going on.</span> <span class="talk-transcript__fragment" data-time="1236726" id="t-1236726" style="box-sizing: border-box;">And open source is making a comeback in science,</span> <span class="talk-transcript__fragment" data-time="1240586" id="t-1240586" style="box-sizing: border-box;">with things like arXiv and open journals.</span> <span class="talk-transcript__fragment" data-time="1247262" id="t-1247262" style="box-sizing: border-box;">Wikipedia changed the world, too.</span> <span class="talk-transcript__fragment" data-time="1249239" id="t-1249239" style="box-sizing: border-box;">So there are other examples,</span> <span class="talk-transcript__fragment" data-time="1250717" id="t-1250717" style="box-sizing: border-box;">I'm sure there are more to come.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">21:04</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1253660" id="t-1253660" style="box-sizing: border-box;">CA: But you're not a visionary,</span> <span class="talk-transcript__fragment" data-time="1255251" id="t-1255251" style="box-sizing: border-box;">and so it's not up to you to name them.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">21:08</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1257228" id="t-1257228" style="box-sizing: border-box;">LT: No.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">21:09</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1258411" id="t-1258411" style="box-sizing: border-box;">(Laughter)</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">21:10</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1259483" id="t-1259483" style="box-sizing: border-box;">It's up to you guys to make them, right?</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">21:12</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1261471" id="t-1261471" style="box-sizing: border-box;">CA: Exactly.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">21:13</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1262758" id="t-1262758" style="box-sizing: border-box;">Linus Torvalds,</span> <span class="talk-transcript__fragment" data-time="1263940" id="t-1263940" style="box-sizing: border-box;">thank you for Linux, thank you for the Internet,</span> <span class="talk-transcript__fragment" data-time="1266209" id="t-1266209" style="box-sizing: border-box;">thank you for all those Android phones.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">21:19</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1268098" id="t-1268098" style="box-sizing: border-box;">Thank you for coming here to TED and revealing so much of yourself.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">21:22</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1271319" id="t-1271319" style="box-sizing: border-box;">LT: Thank you.</span></span></div>
<div class="talk-transcript__para" style="background-color: #f7f7f7; box-sizing: border-box; color: #555555; font-family: 'Helvetica Neue Custom', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin-bottom: 1.5em; position: relative;">
<data class="talk-transcript__para__time" style="box-sizing: border-box; color: #aaaaaa; display: block; left: -4em; margin-left: -23px; position: absolute; text-align: right; top: 0px; width: 4em;">21:23</data><span class="talk-transcript__para__text" style="border-left-color: transparent; border-left-style: double; border-left-width: 3px; box-sizing: border-box; display: block; margin-left: -13px; padding-left: 10px;"><span class="talk-transcript__fragment" data-time="1272495" id="t-1272495" style="box-sizing: border-box;">(Applause)</span></span></div>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com5tag:blogger.com,1999:blog-7298843278162929459.post-42085001500238682032014-08-07T14:07:00.001+09:002014-08-07T14:07:14.388+09:00맥북에어에 우분투 14.04 + linux 3.16 설치2013년 11인치 맥북에어를 사용 중이다. osx 적응에 실패, 우분투와 듀얼 부팅이 되도록 설치해 우분투 메인으로 사용하고 있는데 사실상 쓰지 않는 osx 파티션에 안드로이드 소스 등이 있어 수십 GiB의 용량이 놀고 있는게 영 맘에 걸려, osx 파티션을 더 줄이고 14.04도 나온지 꽤 됐겠다, 우분투를 다시 설치하기로 했다. 여러 문제가 산적해 있던 작년 이맘때와 달리 이제 설치가 매우 쉽고 간편하다. 심지어 리눅스로 도는 맥북에어가 osx 10.9보다 그래픽 성능이 좋다는 이야기도 있다.<br />
<a href="http://www.phoronix.com/scan.php?page=article&item=ubuntu_1404_mba2013gl&num=1">http://www.phoronix.com/scan.php?page=article&item=ubuntu_1404_mba2013gl&num=1</a><br />
<br />
지금 내가 사용하는 맥북에어는 2013년 11인치 모델(6,1)이다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrGIE70fN8EVf4UdEugEuFk3O1CoL9-MTmqx7U3rJv_F_LR4AwJx0cNIjAp-vrpa-EcZAtPIMOTe_rOeFprxHWw1bvrZgZN3JqAeblcqwooby4yp8bKzZJwwvZut79RW2XIDUb5AVHc556/s1600/IMG_20140807_135746.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrGIE70fN8EVf4UdEugEuFk3O1CoL9-MTmqx7U3rJv_F_LR4AwJx0cNIjAp-vrpa-EcZAtPIMOTe_rOeFprxHWw1bvrZgZN3JqAeblcqwooby4yp8bKzZJwwvZut79RW2XIDUb5AVHc556/s1600/IMG_20140807_135746.jpg" height="240" width="320" /></a></div>
<br />
<br />
<h3>
우분투 설치</h3>
설치는 그야말로 쉽다.<br />
다음 링크의 기존 설치법에서 우분투 13.04 대신 14.04 버전으로 1 부터 5 까지 따라하면 된다.<br />
<a href="http://dry-kiss.blogspot.kr/search/label/%EB%A7%A5%EB%B6%81%EC%97%90%EC%96%B4%202013%EB%85%84%20%EB%AA%A8%EB%8D%B8">http://dry-kiss.blogspot.kr/search/label/%EB%A7%A5%EB%B6%81%EC%97%90%EC%96%B4%202013%EB%85%84%20%EB%AA%A8%EB%8D%B8</a><br />
우분투 14.04는 이제 2013년형 맥북에어를 거의 완벽하게 지원한다.<br />
기존의 키보드 / 터치패드 / 사운드 등의 문제는 모두 해결되어 있다.<br />
(커널 문제였고 우분투 14.04가 비교적 최신인 3.13 리눅스를 사용하니 당연하다면 당연한 이야기)<br />
유일한 문제는 와이파이와 스크린 밝기 조절.<br />
<br />
<ol>
<li>설치 후 와이파이가 인식되지 않고, </li>
<li>처음엔 괜찮은데 뚜껑을 닫았다 여는 등의 동작에 의해 화면이 한번 껐다 켜진 후에는 화면 밝기가 아주 밝음과 아주 어두움 두단계로만 동작한다.</li>
</ol>
<br />
화면 밝기 문제는 그닥 중요하지 않으므로 무시하기로 하고...<br />
<br />
<h3>
와이파이 인식 문제 해결</h3>
일단 인터넷이 연결 안된채로 우분투 14.04를 설치하고,<br />
부팅한 후 bcmwl-kernel-source 와 dkms 패키지를 deb로 받아 설치, 재부팅 하면 와이파이 문제는 해결된다.<br />
<br />
<h3>
커널 재빌드, 설치 문제 해결</h3>
한김에 간만에 최신 릴리즈인 3.16버전으로 커널도 재빌드, 설치했다.<br />
커널 빌드 / 설치는 다음 글을 참고하시길.<br />
<a href="http://dry-kiss.blogspot.kr/2014/01/debian-deb.html">http://dry-kiss.blogspot.kr/2014/01/debian-deb.html</a><br />
<br />
재설치, 재부팅 후에는 bcmwl-kernel-source를 다시 설치해줘야 하는데,<br />
3.15 이후 버전부터 빌드가 안되는 문제가 있었다고 한다.<br />
<br />
다행히도 우분투 14.10(코드명 utop)을 위한 버전에서 문제가 해결되었다고 하니,<br />
해당 버전을 받아서 설치, 재부팅 하면 와이파이가 다시 깔끔하게 된다.<br />
다음 링크에서 받을 수 있다(dependancy의 dkms도 설치하는 걸 잊지 말자).<br />
<a href="https://launchpad.net/ubuntu/utopic/amd64/bcmwl-kernel-source/6.30.223.248+bdcom-0ubuntu1">https://launchpad.net/ubuntu/utopic/amd64/bcmwl-kernel-source/6.30.223.248+bdcom-0ubuntu1</a><br />
<br />
<h3>
세줄 요약</h3>
osx으로 부팅, disk manager에서 우분투 설치할 파티션을 만들어주고,<br />
우분투 14.04를 설치 후,<br />
dkms와 bcmwl을 dpkg로 받은 후 재부팅 한다.<br />
끝.<br />
<br />
<h3>
본문에서 언급한 패키지들 deb 다운로드 가능한 링크들</h3>
<div>
다음 링크들에 들어가 Downloadable Files 항목의 deb 파일들을 받고,</div>
<div>
sudo dpkg -i <해당 deb 파일들의 경로>를 입력하시면 됩니다.</div>
<div>
<br /></div>
<div>
e.g., <span style="font-family: Courier New, Courier, monospace;">$ sudo dpkg -i bcmwl.deb dkms.deb</span></div>
<div>
<br /></div>
<b>bcmwl 다운로드 링크</b><br />
<a href="https://launchpad.net/ubuntu/utopic/amd64/bcmwl-kernel-source/6.30.223.248+bdcom-0ubuntu1">https://launchpad.net/ubuntu/utopic/amd64/bcmwl-kernel-source/6.30.223.248+bdcom-0ubuntu1</a><br />
<b>dkms 다운로드 링크</b><br />
<a href="https://launchpad.net/ubuntu/utopic/amd64/dkms/2.2.0.3-1.1ubuntu5">https://launchpad.net/ubuntu/utopic/amd64/dkms/2.2.0.3-1.1ubuntu5</a>SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-88730774203546310272014-01-29T21:11:00.001+09:002014-01-29T21:22:58.123+09:00포인터와 배열은 어떻게 다른가 in assembly level포인터와 배열은 다들 알다시피 비슷하지만 다른데, 어셈블리 레벨에서 보면 더욱 자세히 와닿을 수 있다.<br />
<br />
다음은 간단하게 배열과 포인터를 각각 사용하는 c 코드와 그로부터 만들어진 어셈블리 코드이다.<br />
<br />
<script src="https://gist.github.com/sjp38/8686618.js"></script>
<br />
arr.s의 6, 7라인. 그리고 22라인을 보자.<br />
어레이의 경우는 리터럴의 시작주소가 곧 자신의 위치이다.<br />
따라서 접근을 할 때, $a와 같이 해당 심볼의 위치를 바로 가져온다.<br />
<br />
ptr.s에서는 4,5,10,11라인. 그리고 26라인을 보자.<br />
반면, 포인터는 리터럴의 시작주소를 값으로 가진다.<br />
따라서 접근 시, a(%rip)와 같이, rip relative 방식으로 해당 변수의 '값'을 가져온다.SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-66216074648727620302014-01-28T20:07:00.000+09:002014-01-28T20:07:03.949+09:00How to upload a kernel module on Android emulator<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLttErBlq3f0mJUJqW0ZcPOytexgcWaS93-31KGnB8zSzXymuM7ABG1WH21CHhgBD7puOud4I-9TZoSamYdyPyqmHaiDIHYBIMZOmZ0Z42MUQI3G0QGaOaYhDfd7hVPl3IxAH_CNlMfbtw/s1600/goldfishkernelmodule.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLttErBlq3f0mJUJqW0ZcPOytexgcWaS93-31KGnB8zSzXymuM7ABG1WH21CHhgBD7puOud4I-9TZoSamYdyPyqmHaiDIHYBIMZOmZ0Z42MUQI3G0QGaOaYhDfd7hVPl3IxAH_CNlMfbtw/s320/goldfishkernelmodule.png" height="161" width="320" /></a></div>
<br />
Because Android system use linux as it's kernel, you can run your code in kernel mode by make and load a kernel module on Android.<br />
<br />
This post simply explain how to build and load a kernel module on Android emulator.<br />
<br />
Name of virtual device for default Android emulator is <i>goldfish</i>. So, in this post, I will call the kernel for Android emulator as goldfish kernel.<br />
<br />
<span style="font-size: large;">0. Environment</span><br />
Development device / software version I used for this post is:<br />
<br />
<ul>
<li><span style="font-family: 'Courier New', Courier, monospace;">ubuntu 12.04 desktop 64bit</span></li>
<li><span style="font-family: 'Courier New', Courier, monospace;">git 1.7.9.5</span></li>
<li><span style="font-family: 'Courier New', Courier, monospace;">AOSP master branch synced someday between 4.2.1_r1 and 4.2.2</span></li>
</ul>
<br />
<br />
<span style="font-size: large;">1. Build & Use goldfish kernel</span><br />
goldfish kernel doesn't support module in default. So, you should modify the setting to support module, build again with the setting, and use the rebuilt kernel.<br />
<br />
<b>1.1. Get kernel source code for Android emulator</b><br />
<span style="font-family: Courier New, Courier, monospace;">$ git clone https://android.googlesource.com/kernel/goldfish</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ cd goldfish</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ git checkout android-goldfish-2.6.29</span><br />
(You can pick which branch to checkout as you want. You can see which branch is available using $ git branch -r command)<br />
<br />
<b>1.2. Get prebuilt project</b><br />
For cross-compile, you should get AOSP's <i>prebuilt</i> project.<br />
<span style="font-family: Courier New, Courier, monospace;">$ git clone https://android.googlesource.com/platform/prebuilt</span><br />
<br />
<b>1.3. kernel build configuration setting</b><br />
You can set linux kernel build setting as you want. The setting information is saved as<i> .config</i> file in source code directory. But, the source code you got in above step have no <i>.config</i> file.<br />
Make default goldfish kernel build configuration file with the command below:<br />
<span style="font-family: Courier New, Courier, monospace;">$ make goldfish_defconfig</span><br />
<br />
Now, you can see <i>.config</i> file. Or, you can get the configuration of already running emulator with command below.<br />
<span style="font-family: Courier New, Courier, monospace;">$ adb pull /proc/config.gz</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ gunzip config.gz</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ mv config .config</span><br />
<br />
<b>1.4. Modify configuration to support module</b><br />
Open .config file you generated and add next lines:<br />
<span style="font-family: Courier New, Courier, monospace;">CONFIG_MODULES=y</span><br />
<span style="font-family: Courier New, Courier, monospace;">CONFIG_MODULES_FORCE_LOAD=y</span><br />
<span style="font-family: Courier New, Courier, monospace;">CONFIG_MODULES_UNLOAD=y</span><br />
<span style="font-family: Courier New, Courier, monospace;">CONFIG_MODULES_FORCE_UNLOAD=y</span><br />
<br />
If you don't set CONFIG_MODULE_UNLOAD, you can't unload moudle after loading. Be careful.<br />
<br />
<b>1.5. Build goldfish kernel</b><br />
You can just follow s.android.com's same contents. In summary,<br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ ARCH=arm CROSS_COMPILE=<path to prebuilt we downloaded above>/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- make -j2</span><br />
<br />
The <span style="font-family: Courier New, Courier, monospace;"><path to prebuild we downloaded above></span> should be alternated with the path to <i>prebuild</i> you got from 1.2 section.<br />
After build process, You can see the kernel image, <i>zImage</i> file.<br />
<br />
<b>1.6. Use the built kernel with emulator</b><br />
You can specify which kernel the emulator will use with next command:<br />
<span style="font-family: Courier New, Courier, monospace;">$ emulator -kernel <path of kernel image></span><br />
-show-kernel and -verbose option may be helpful in some way.<br />
<br />
<span style="font-size: large;">2. Build Android kernel module</span><br />
Now, let's code and build kernel module for Android.<br />
<b>2.1. Source code for kernel module</b><br />
Make simple file like below in name android_module.c<br />
<br />
<script src="https://gist.github.com/sjp38/6077499.js"></script>
<div>
I will not explain about how the code works precisely in this post because it's not this post's object.<br />
Simply, the source code will print "Hello android kernel..." when loaded on, "Goodbye android kernel..." message when it unloaded from kernel on kernel log.<br />
You may change the content of source code as you want.</div>
<br />
<b>2.2. Write Makefile for the kernel module build process</b><br />
Write Makefile with content below:<br />
<script src="https://gist.github.com/sjp38/6077516.js"></script>
-C option at 4, 7line should point the path to kernel source code.<br />
<br />
<br />
<b>2.3. Build kernel module</b><br />
Just set ARCH, CROSS_COMPILE environmental variable and do make. It's essentially same with kernel compile command.<br />
<span style="font-family: Courier New, Courier, monospace;">$ ARCH=arm CROSS_COMPILE=<path to prebuilt we downloaded above>/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- make</span><br />
<br />
If build success, you can see android_module.ko file generated.<br />
<br />
<span style="font-size: large;">3. Load kernel module</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ adb push android_module.ko /data/</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ adb shell</span><br />
<span style="font-family: inherit;">(Now, you are on Android's shell)</span><br />
<span style="font-family: Courier New, Courier, monospace;"># insmod /data/android_module.ko</span><br />
<br />
You can see the message Hello android kernel... on kernel log by using command like dmesg.<br />
<br />
<span style="font-size: large;">4. Unload kernel module</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ adb shell</span><br />
<span style="font-family: Courier New, Courier, monospace;"># rmmod android_module</span><br />
<br />
You can see the message Goodbye android kernel... on kernel log by using command like dmesg, too.<br />
<br />
<br />
* You may encounter vermagic problem during module loading on some case.<br />
In the case, article below may be helpful.<br />
<a href="http://dry-kiss.blogspot.kr/2013/07/android-linux-module-vermagic.html">http://dry-kiss.blogspot.kr/2013/07/android-linux-module-vermagic.html</a><br />
<br />
<br />
References:<br />
<a href="http://linuxclues.blogspot.kr/2010/05/build-compile-linux-kernel-android.html">http://linuxclues.blogspot.kr/2010/05/build-compile-linux-kernel-android.html</a><br />
<a href="http://stackoverflow.com/questions/6282669/how-do-you-create-a-loadable-kernel-module-for-android">http://stackoverflow.com/questions/6282669/how-do-you-create-a-loadable-kernel-module-for-android</a><br />
<a href="http://s.android.com/">http://s.android.com/</a>SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-17649501307659769082014-01-28T19:22:00.002+09:002014-01-28T19:24:57.077+09:00Make complex touch event on Android using monkeyrunner<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXdR1t7fRUl4Xiy2YOUTTIhgqTI72HhSsIhXQvr7KZKhe9qcmXk57mE2ho7Py0kaffZFnoq8SvWyxemFob3ruyJz1nzmGKBVOU58Q4HSyGB7ixBOZErBDPX4t3ad_0hEFhmwNDDXksoIo7/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXdR1t7fRUl4Xiy2YOUTTIhgqTI72HhSsIhXQvr7KZKhe9qcmXk57mE2ho7Py0kaffZFnoq8SvWyxemFob3ruyJz1nzmGKBVOU58Q4HSyGB7ixBOZErBDPX4t3ad_0hEFhmwNDDXksoIo7/s320/4.jpg" height="320" width="212" /></a></div>
<div style="text-align: center;">
<span style="font-size: xx-small;">(source of image: <a href="http://pcdn.500px.net/14898503/aa61b81170e21e78e3c11d1bb2ecf9b05232cf3e/4.jpg">http://pcdn.500px.net/14898503/aa61b81170e21e78e3c11d1bb2ecf9b05232cf3e/4.jpg</a>)</span></div>
<br />
You can control Android device simply using <i>monkeyrunner</i>.<br />
But, because it supports only simple <i>DRAG</i> command which just drag from one point to other point in specific speed, users couldn't reproduce real people's complex(e.g., drawing complex picture or remove app icon from home screen) touch event.<br />
<br />
So, I modified monkeyrunner to provide <i>MOVE</i> event and contributed the code to <i>AOSP</i>. It merged soon.<br />
(<a href="https://android-review.googlesource.com/#/c/50991/">https://android-review.googlesource.com/#/c/50991/</a>)<br />
<br />
After that, one day, one guy asked about how the feature can be used on stackoverflow and sent mail about that to me.<br />
(<a href="http://stackoverflow.com/questions/18161416/android-monkey-runner-touch-with-move">http://stackoverflow.com/questions/18161416/android-monkey-runner-touch-with-move</a>)<br />
<br />
So, I made and shared a simple example code for that question. I think it would be better to share it here, too.<br />
<br />
<script src="https://gist.github.com/sjp38/6202539.js"></script>
Just use the type <i>MOVE</i> like <i>DOWN</i>, <i>UP</i> as argument inside <i>touch</i> function call.<br />
Hope it can be helpful to someone ;)SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-810006530376166202014-01-28T16:10:00.002+09:002014-01-28T16:11:20.255+09:00How to build / install linux kernel on Debian based distributions(e.g., Ubuntu) in deb formatOn <i>Debian</i> based distribution system like <i>Ubuntu</i>, you can build linux kernel in <i>deb</i> format. It would be easier to install / redistribute the kernel.<br />
<h2>
Install Required Package</h2>
<span style="font-family: Courier New, Courier, monospace;">$ sudo apt-get install kernel-package</span><br />
<div>
<br /></div>
<div>
<h2>
Get Linux Kernel Source Code</h2>
</div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.13.tar.xz</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ tar -xJf linux-3.13.tar.xz</span></div>
<div>
<br /></div>
<div>
<h2>
Set Build Configuration</h2>
</div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ cp /boot/config-blahblah ./.config</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ make oldconfig</span></div>
<div>
<br /></div>
<div>
<h2>
Build in <i>deb</i> Format</h2>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ fakeroot make-kpkg --initrd -j 3 --revision 3.13.sjpark kernel-image</span></div>
<div>
<br /></div>
<div>
<h2>
Install The Kernel</h2>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ sudo dpkg -i ../linux-image-3.13.0+_3.13.sjpark_amd64.deb</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ sudo shutdown -r now</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ uname -r</span></div>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-2964883575919128782014-01-26T15:54:00.001+09:002014-01-28T16:06:14.241+09:00Debian 계열(우분투 등)에서 deb로 커널 빌드우분투 등의 debian 계열 배포본에서는 커널도 deb로 빌드, 간편하게 설치 / 재배포 할 수 있다.<br />
<br />
<h2>
필요 패키지 설치</h2>
<span style="font-family: Courier New, Courier, monospace;">$ sudo apt-get install kernel-package</span><br />
<div>
<br /></div>
<div>
<h2>
커널 소스코드 다운로드</h2>
</div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.13.tar.xz</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ tar -xJf linux-3.13.tar.xz</span></div>
<div>
<br /></div>
<div>
<h2>
빌드 configuration 설정</h2>
</div>
<div>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ cp /boot/config-blahblah ./.config</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ make oldconfig</span></div>
<div>
<br /></div>
<div>
<h2>
deb로 빌드</h2>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ fakeroot make-kpkg --initrd -j 3 --revision 3.13.sjpark kernel-image</span></div>
<div>
<br /></div>
<div>
<h2>
설치</h2>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ sudo dpkg -i ../linux-image-3.13.0+_3.13.sjpark_amd64.deb</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ sudo shutdown -r now</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ uname -r</span></div>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-32325614241099713582014-01-06T17:09:00.001+09:002014-01-06T17:14:10.353+09:00우분투에서 SRPM(Source RPM) 수정하기<h3>
0. RPM, Source RPM</h3>
<div>
RPM은 다들 알다시피 Redhat Package Manager의 약자로, 자신이 만든 소프트웨어를 배포하기 편리한 하나의 패키지로 만드는데 사용되는 시스템이며, 그렇게 만들어진 패키지를 rpm 또는 rpm 파일이라 한다.</div>
<div>
독점 소프트웨어에서는 배포하는 패키지라면 빌드 완료된 바이너리로만 구성되어 있는 경우가 대부분이지만, 오픈소스 소프트웨어에서는 배포 패키지가 꼭 바이너리여야 할 이유가 없다. 패키징만 잘 되어 있어 주고 받기 편하고 사용자가 어느 시스템을 사용하든 그 소프트웨어를 쉽게 설치할 수 있으면 땡이다.</div>
<div>
그리고, 어떤 면에서는 빌드가 끝난 바이너리보다 소스코드로 배포하는게 더 나은 경우가 존재한다.</div>
<div>
따라서, RPM은 빌드가 끝난 바이너리를 패키징해서 만들수도, 소스코드를 담고 빌드 방법을 함께 담아서 패키지로 만들 수도 있다.</div>
<div>
각각을 Binary RPM, Source RPM 이라고 부르기도 한다.</div>
<div>
<br /></div>
<div>
<h3>
1. RPM을 수정해야 하는 경우</h3>
</div>
<div>
많은 사용자가 쉽게 사용할 수 있도록 배포자는 혼신의 노력을 기울여 패키지를 만들었겠지만, 실제 패키지를 사용해보면 문제가 발생하는 경우가 많다.</div>
<div>
문제를 발견해서 수정해 원저자에게 패치를 보내주는게 오픈소스 소프트웨어의 좋은 경우겠지만, 때로는 원저자가 더이상 해당 프로젝트에 관심을 잃은 경우가 있고, 또는 당장의 빠른 수정이 필요한 경우가 있다.</div>
<div>
SRPM의 경우는 특히나 소스코드를 볼 수 있으므로 자신이 수정해서 당장의 문제를 해결하는 것이 가능하다.</div>
<div>
<br /></div>
<div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">본 글에서는 </span><span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><b>우분투 환경에서 patch를 만들어 srpm을 수정하는 방법</b></span><span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">을 기술한다.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Arial;"><span style="white-space: pre-wrap;">테스트한 환경은 우분투 13.04 64bit server판이었다.</span></span></div>
<b style="font-weight: normal;"><span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">target.src.rpm 이라는 이름의 srpm을 수정한다고 가정한다.</span></div>
<br />
<h3>
2. 필요 패키지 설치</h3>
먼저 시스템에 rpm 패키지가 설치되어 있지 않다면 다음 명령으로 rpm 패키지를 설치한다. rpm은 레드햇 계열의 패키지 포맷이지만 데비안 계열인 우분투에서도 rpm 패키지를 이용해 사용할 수 있다.<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">$ sudo apt-get install rpm</span><br />
<br />
해당 패키지는 rpm을 단계별로 설치할 수 있는 rpm과, 새로이 RPM 파일을 만들 수 있는 rpmbuild다른 명령을 제공한다. 이 글에선 rpm을 이용해 코드를 풀고, 이 코드를 수정 후, 수정된 내용으로 rpmbuild를 이용해 새로인 SRPM을 만드는 식으로 수정된 SRPM을 얻을 것이다.<br />
<br />
<h3>
3. SRPM 풀기</h3>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">rpm 을 이용해 srpm을 단계별로 설치할 수 있으며, 이 단계는 간략히 소스코드를 꺼내고, 빌드하고, 설치하고, 하는 단계로 이루어진다. 따라서 꺼내는 단계까지만 설치를 진행하면 우리가 보고 싶은 소스코드를 볼 수 있다. 아래 명령을 통해 소스코드를 꺼내는 단계까지만 진행할 수 있으며, 소스코드를 위치시킬 </span><span style="font-family: Arial; line-height: 1.15; white-space: pre-wrap;">경로는 _topdir로 설정할 수 있다. 아래 명령의 /path/to/extract 는 자신이 편한 디렉토리 경로로 대체하자.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ rpm --define ‘_topdir /path/to/extract’ -i target.src.rpm</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">이제 /path/to/extract에 가보면 SPECS와 SOURCE 디렉토리가 있고, 각 디렉토리 아래에는 각각 spec 파일과 압축되거나 한 형태의 소스코드가 있다.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Arial;"><span style="white-space: pre-wrap;">하지만 아직 소스코드는 압축된 상태이다. 그냥 압축 해제 프로그램으로 압축을 풀지 말고, 다음의 과정을 진행하자.</span></span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<h3>
<b style="font-weight: normal;">4. 빌드 준비</b></h3>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">spec 파일은 빌드 준비 / 실행 / 정리 등의 과정을 Makefile처럼 정리해 뒀고, 보통 prepare 과정을 통해 SOURCE 디렉토리 아래 소스코드를 BUILD 디렉토리 아래로 옮기고, 소스코드가 압축되어 있다면 압축을 푸는 식으로 빌드 준비를 한다. 다음의 커맨드로 이를 행한다.</span><br />
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ cd /path/to/extract/SPECS</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ rpmbuild --define ‘_topdir /path/to/extract’ -bp target.spec</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">target.spec은 SPECS 디렉토리 아래 존재하는 spec 확장명의 파일명을 입력한다.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h3>
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">5. 코드 수정 & 패치 작성</span></h3>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">이제 코드에 수정을 가하고 이를 바탕으로 패치를 만들어 SOURCE 디렉토리로 이동시켜야 한다. 오리지널 코드와 수정한 코드를 둘 다 가지고 있어야 그 차이로 변경내역을 나타내는 패치로 만들어야 하므로, 다음과 같이 오리지널 코드를 보존해 둔 상태로 코드를 수정한다.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Arial;"><span style="white-space: pre-wrap;">명령어의 existing_dir은 실제 존재하는 소스코드 디렉토리의 이름으로 대체하자.</span></span><br />
<span style="font-family: Arial;"><span style="white-space: pre-wrap;"><br /></span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ cd /path/to/extract/BUILD</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ cp -R ./existing_dir ./extracting_dir.orig</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">본인에게 편한 방법으로 /path/to/extract/BUILD/existing_dir 아래의 코드에 수정을 가하고 나서 다음 명령을 이용해 패치를 만들고 SOURCES 디렉토리 아래로 옮긴다. 역시 name_of_patch.patch는 본인이 원하는 패치 파일 이름으로 적당히 대체를.</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ diff -Npru existing_dir.orig/ existing_dir > name_of_patch.patch</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ mv name_of_patch.patch /path/to/extract/SOURCES/</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<h3>
6. srpm 설치 시 patch를 적용하도록 spec 파일 수정</h3>
이제 해당 srpm을 설치 시 앞의 과정에서 만든 패치를 적용하게 해야 한다. specs 파일을 수정하는 것으로 그렇게 할 수 있다.<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Source 항목 아래 Patch0 라는 항목을 만들어 앞서 만든 name_of_patch.patch를 적어주고, %setup 아래 %patch0 -p1이라는 항목을 넣어 해당 patch를 사용함을 알린다.</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">예:</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Source0: %{name}-%{version}-%{release}.tar.gz </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Patch0: for_ubuntu13.04_sjpark.patch</span><span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Prefix: /usr </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Requires(post): /sbin/ldconfig </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Requires(postun): /sbin/ldconfig </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Conflicts: infinipath-libs </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> %package devel </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Summary: Development files for QLogic PSM </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Group: System Environment/Development </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Requires: %{name} = %{version}-%{release} </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Requires(post): /sbin/ldconfig </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Requires(postun): /sbin/ldconfig </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Conflicts: infinipath-devel </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> %description </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> The PSM Messaging API, or PSM API, is QLogic's low-level </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> user-level communications interface for the Truescale </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> family of products. PSM users are enabled with mechanisms </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> necessary to implement higher level communications </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> interfaces in parallel environments. </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> %description devel </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Development files for the libpsm_infinipath library </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> %prep </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> %setup -q -n infinipath-psm-%{version}-%{release} </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">%patch0 -p1</span><span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h3>
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">7. 수정된 RPM 빌드</span></h3>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">이제 끝. 마지막으로 우리가 원하는 SRPM 또는 RPM을 얻기 위해 다음 명령을 날려준다.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Courier New, Courier, monospace; font-size: x-small; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">$ rpmbuild --define '_topdir /path/to/extract' -ba target.spec</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">이제 RPMS 디렉토리 아래에 rpm이, SRPMS 디렉토리 아래에 srpm 파일이 존재할 것이다.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h3>
<span style="font-family: Arial;"><span style="white-space: pre-wrap;">번외: 현 디렉토리의 모든 SRPM을 4번 단계까지 진행하는 코드</span></span></h3>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Arial;"><span style="white-space: pre-wrap;">이상의 내용을 바탕으로 python으로 간략히 현 디렉토리의 모든 SRPM을 4번 단계까지, 즉 코드를 볼 수 있는 수준까지 진행하는 스크립트를 짜봤다.</span></span></div>
<a href="https://gist.github.com/sjp38/7095984">https://gist.github.com/sjp38/7095984</a><br />
<br /></div>
<div>
<br /></div>
<div>
참고 자료:</div>
<div>
<a href="http://www.quepublishing.com/articles/article.aspx?p=21327">http://www.quepublishing.com/articles/article.aspx?p=21327</a></div>
<div>
<a href="http://wiki.centos.org/HowTos/RebuildSRPM">http://wiki.centos.org/HowTos/RebuildSRPM</a></div>
<div>
<a href="http://unix.stackexchange.com/questions/16904/how-to-unpack-modify-rebuild-and-install-a-srpm">http://unix.stackexchange.com/questions/16904/how-to-unpack-modify-rebuild-and-install-a-srpm</a></div>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-58630015228841482962013-10-31T18:57:00.003+09:002014-01-28T16:12:48.047+09:00Install Ubuntu 13.04 + linux 3.11 and dual-boot with OSX on Macbook Air, 2013Macbook Air(MBA) is one of greatest machine for hackers. I bought MBA 2010 when 11" model released and used to hack with it.<br />
<br />
One day, I attended <i>linux</i> forum and requested <b>torvalds's</b> <b>signature</b> on my MBA. He refused to have a signature on MBA, but I persuaded him with my promise to install linux on my MBA. After the event, I got torvalds's signature on my MBA and installed Ubuntu 12.04 on it. And, it was really great. MBA's mobility and linux. It's really cool hacking environment.<br />
<br />
Recently, because MBA 2010 was too old, I bought MBA 2013 11" model and installed Ubuntu 13.04. Because Ubuntu 13.04 didn't support MBA well, I also build and installed linux 3.11 official version with some patch on it. Now, I'm enjoying my hacking life.<br />
<br />
Because the installation was not so easy, I want to record / share my experience here.<br />
Because the time I installed Ubuntu was about 2 months ago, some parts may not be up to date. Just hope it can be a little help to somebody :)<br />
<br />
<br />
<span style="font-size: large;">0. Install Environment</span><br />
My MBA is 11" model published from 2013(6,1). I also upgraded it's cpu, RAM, SSD.<br />
<br />
<span style="font-size: large;">1. Download Ubuntu Image and Burn Install CD</span><br />
Ubuntu distribute installation CD image for Mac in seperate way. Go to the link below and download 13.04 for mac image(<span style="font-family: Courier New, Courier, monospace;">ubuntu-13.04-desktop-amd64+mac.iso</span>) and burn CD using it.<br />
<a href="http://releases.ubuntu.com/raring/">http://releases.ubuntu.com/raring/</a><br />
<br />
I think live USB will be Ok, too. But, in my case, because my USB broken, I did with CD using USB CD driver.<br />
<br />
<span style="font-size: large;">2. SSD Partition</span><br />
Make partition on SSD for Ubuntu installation. Open <i>disk utility</i> from Mac OSX(If hard to find, use <i>spotlight</i>).<br />
Select SSD, enter to Partition tab, reduce partition size for <i>Macintosh HD</i> partition as you want to.<br />
If my explanation is too concise, see the link below:<br />
<a href="http://osxdaily.com/2009/11/20/resize-partitions-in-mac-os-x-with-disk-utility/">http://osxdaily.com/2009/11/20/resize-partitions-in-mac-os-x-with-disk-utility/</a><br />
<br />
<span style="font-size: large;">3. Boot to Ubuntu Install Image</span><br />
Connect Live CD or Live USB you made from step 1, restart MBA. Before MBA powered on, press Option(alt) key. You should press it as soon as you pressed power button to turn on MBA. Then, booting partition selection screen like below photo will be displayed.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRxM5xPumASbi8Te1m2rPbV1aVT-EYDR4skhuBKOKi9jZ3MszEZ3GpkG6oIstFxm66p6irqGfwrfaxpFXVJW0HbixBhXhyxQaQbVZfRouZfL4O0WeJoSd9h9esyN_0jPXVnaSk3a21ssNs/s1600/photo+(2).jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRxM5xPumASbi8Te1m2rPbV1aVT-EYDR4skhuBKOKi9jZ3MszEZ3GpkG6oIstFxm66p6irqGfwrfaxpFXVJW0HbixBhXhyxQaQbVZfRouZfL4O0WeJoSd9h9esyN_0jPXVnaSk3a21ssNs/s320/photo+(2).jpg" height="208" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
The USB displayed as Windows. Looks like <i>OSX</i> think it's just Windows if user trying to boot from other media such as CD or USB. It's annoying but, just select it. Then, MBA boot to Ubuntu in Live CD or Live USB.<br />
<br />
<span style="font-size: large;">4. rEFIt Install</span><br />
Pressing option key every time can be annoying. The program <i>rEFIt</i> can help it. <i>rEFIt</i> is boot option selection / managing program. You can download from the link below:<br />
<a href="http://refit.sourceforge.net/#download">http://refit.sourceforge.net/#download</a><br />
Just execute downloaded <i>rEFIt</i> and execute install file. Then <i>rEFIt</i> be installed. Now, when you restart MBA, it doesn't boot to OSX automatically, rather ask you which partition you want to boot.<br />
<br />
Actually, the developer of <i>rEFIt</i> doesn't support it any more. He is now developing same purpose program with new name <i>rEFInd</i>. It'd rather to use it. I just used <i>rEFIt</i> because I didn't know <i>rEFInd</i> at that time.<br />
<br />
<br />
<span style="font-size: large;">5. Ubuntu Install</span><br />
<i>Ubuntu</i> installation is very easy. Just install <i>Ubuntu</i> as usually you did on other computer. It will ask you whether want to remove <i>OSX</i> and install <i>Ubuntu</i> on entire SSD. If you want dual-booting with <i>Ubuntu</i> and <i>OSX</i>, you should not remove <i>OSX</i>. Just install <i>Ubuntu</i> beside of <i>OSX</i>.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEyqpwGDdbr8WgiIBwTP7ACEvlgg1ezywogBuj9BlsLokUU8XJqIJ4uKKr6WW5s_Z1w3qTFyafGWvB8Qh-4DRiB6GMF_7qCmQQRvtWOOolZav6rK0zKwG4aDXRpsdLee6DuZIduecO9s-L/s1600/IMG_20130903_212731.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEyqpwGDdbr8WgiIBwTP7ACEvlgg1ezywogBuj9BlsLokUU8XJqIJ4uKKr6WW5s_Z1w3qTFyafGWvB8Qh-4DRiB6GMF_7qCmQQRvtWOOolZav6rK0zKwG4aDXRpsdLee6DuZIduecO9s-L/s320/IMG_20130903_212731.jpg" height="224" width="320" /></a></div>
<br />
After Ubuntu installation completed, you can see screen below after reboot.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOw4q-Y8Lk9e7ELIaHmGp2dQ2HQE5qGJSms99mHyIQL4w3NhHtshRLHHO2jARv2Tzy2gJW1-D56q5BqwhwTJZIBdAf46GBIQ8c7fmMLnyhBDHtbOG9ItxHhSFbMf6yVsgw279ym1j17uv6/s1600/IMG_20130903_214308.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOw4q-Y8Lk9e7ELIaHmGp2dQ2HQE5qGJSms99mHyIQL4w3NhHtshRLHHO2jARv2Tzy2gJW1-D56q5BqwhwTJZIBdAf46GBIQ8c7fmMLnyhBDHtbOG9ItxHhSFbMf6yVsgw279ym1j17uv6/s320/IMG_20130903_214308.jpg" height="230" width="320" /></a></div>
<br />
After select <i>tux(the cute penguin)</i> from this screen, <i>grub</i> bootloader comes. Select Ubuntu from <i>grub</i> bootloader. Now, it should boot to <i>Ubuntu</i>... But, not... It doesn't boot and screen stuck. We will solve this problem in next step.<br />
<br />
<span style="font-size: large;">6. Add nosmp on linux parameter</span><br />
You can adjust <span style="font-family: Courier New, Courier, monospace;">linux boot parameter</span> from <span style="font-family: Courier New, Courier, monospace;"><i>grub</i></span> by pressing key '<span style="font-family: Courier New, Courier, monospace;">e</span>'. You can boot successfully by adding <span style="font-family: Courier New, Courier, monospace;">nosmp</span> on parameter.<br />
<br />
There would be exist the line start with next content in second line from end of screen.<br />
<span style="font-family: Courier New, Courier, monospace;">linux /boot/vmlinuz-3.8.0 root=UUID=</span><br />
<br />
Just enter '<span style="font-family: Courier New, Courier, monospace;"> nosmp</span>'(without quotation mark, with one whitespace) on last of the line and press <span style="font-family: Courier New, Courier, monospace;">f10</span> key. Now, it will boot to Ubuntu.<br />
<br />
<span style="font-size: large;">7. Add nosmp permanently</span><br />
Now we succeed to boot to Ubuntu. But, type <span style="font-family: Courier New, Courier, monospace;">nosmp</span> every time boot to Ubuntu from <i>grub</i> may be very annoying and uncomfortable. You can add <span style="font-family: Courier New, Courier, monospace;">nosmp</span> to boot parameter permanently.<br />
Open <span style="font-family: Courier New, Courier, monospace;">/etc/default/grub</span> file and find the line start with <span style="font-family: 'Courier New', Courier, monospace; font-size: 15px; white-space: pre-wrap;">GRUB_CMDLINE_LINUX_DEFAULT=".</span>Type <span style="font-family: Courier New, Courier, monospace;">nosmp</span> inside quotation mark. It may need <i>super user permission</i> to edit the file.<br />
After that, save and close file, and update grub config using the command below:<br />
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;">$ sudo update-grub</span></span><br />
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">8. Let WiFi Work</span></span><br />
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Now, we can boot, but problem still exist. First, WiFi. It's because Ubuntu 13.04 have no device driver for MBA's WiFi. Download deb file from the link below:</span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<a href="https://launchpad.net/ubuntu/saucy/amd64/bcmwl-kernel-source/6.30.223.30+bdcom-0ubuntu3" style="text-decoration: none;"><span style="color: #1155cc; font-family: Arial; font-size: 15px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://launchpad.net/ubuntu/saucy/amd64/bcmwl-kernel-source/6.30.223.30+bdcom-0ubuntu3</span></a><span style="color: black; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<span id="docs-internal-guid--67294f1-f7ac-590d-2c56-54f913fbdf5a"><span style="color: #1155cc; font-family: Arial; font-size: 15px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"><a href="http://launchpadlibrarian.net/138967184/dkms_2.2.0.3-1.1ubuntu3_all.deb" style="text-decoration: none;">http://launchpadlibrarian.net/138967184/dkms_2.2.0.3-1.1ubuntu3_all.deb</a></span></span><br />
Install the deb file using the command below and reboot. Now, WiFi will work.<br />
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;">$ sudo dpkg -i path/to/downloaded/deb_file</span></span><br />
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">9. Change To EFI Mode for Whole Cores</span></span><br />
<span style="font-family: Courier New, Courier, monospace; vertical-align: baseline; white-space: pre-wrap;">nosmp</span><span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;"> parameter from step above means we will use <b>only one core</b> in MBA. It was just a work-around for boot because MBA doesn't support bios way booting properly. It's shameful to use only one core in Multi-core era. You can use whole cores if you boot linux with <i>EFI</i> mode.</span><span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;">See next link and change Ubuntu to EFI mode:</span><br />
<span id="docs-internal-guid--67294f1-f7b0-d6cd-3e64-9a2dfd7774b6"><span style="color: #1155cc; font-family: Arial; font-size: 15px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"><a href="https://help.ubuntu.com/community/UEFI#Converting_Ubuntu_into_EFI_mode" style="text-decoration: none;">https://help.ubuntu.com/community/UEFI#Converting_Ubuntu_into_EFI_mode</a></span></span><br />
<br />
The link's content says, in concisely, just install a program named <i>boot-repair</i> using next command,<br />
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><span style="font-family: Courier New, Courier, monospace;">sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update</span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><span style="font-family: Courier New, Courier, monospace;">sudo apt-get install -y boot-repair && (boot-repair &)</span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><br /></span>
<span style="line-height: 19px;">And change Ubuntu to EFI mode using the program.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><br /></span>
<span style="line-height: 19px;">After changed to <i>EFI</i> mode, remove <span style="font-family: Courier New, Courier, monospace;">nosmp</span> from </span><span style="font-family: 'Courier New', Courier, monospace;">/etc/default/grub </span><span style="line-height: 19px;">file, and <span style="font-family: Courier New, Courier, monospace;">sudo update-grub</span> to make it effect.</span><br />
<span style="line-height: 19px;"><br /></span>
<span style="line-height: 19px;">Now, restart MBA. You should able to see lots of boot options like below photo.</span><br />
<span style="line-height: 19px;">Boot to Ubuntu in EFI mode.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzRyah8pF3GKcQdS3JOodhLZ8olt-D0D6C30H1hgN02VxraXTWGc99AwMETQ2-p9JS4Ldcwj5lXfpCFB-pUgSXKIcTwCBiSkHyr2y3drP0MUtnePtRbDBfiC8IjWu2R2SkHISCTjp8Pabp/s1600/IMG_20130903_223044.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzRyah8pF3GKcQdS3JOodhLZ8olt-D0D6C30H1hgN02VxraXTWGc99AwMETQ2-p9JS4Ldcwj5lXfpCFB-pUgSXKIcTwCBiSkHyr2y3drP0MUtnePtRbDBfiC8IjWu2R2SkHISCTjp8Pabp/s320/IMG_20130903_223044.jpg" height="232" width="320" /></a></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">Now, you can use whole cores in MBA.</span><br />
<span style="line-height: 19px;"><br /></span>
<span style="line-height: 19px;">Also, you may see lots of error message while booting. If it's too annoying, Open<span style="font-family: Courier New, Courier, monospace;"> /etc/default/grub</span> again and insert <span style="font-family: Courier New, Courier, monospace;">libata.force=nonc</span>q as we did with nosmp. Also, never forget to <span style="font-family: Courier New, Courier, monospace;">sudo update-grub</span>.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><span style="font-size: large;">10. Install linux 3.11</span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">Problem still exist. <span style="font-family: Courier New, Courier, monospace;">fn</span> key doesn't works, track pad works as just a mouse, not track pad(can't scroll using two fingers), speaker doesn't works. But, first, let's go to kernel 3.11 version.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><br /></span>
<span style="line-height: 19px;">Download 3.11.0 linux source code from kernel.org or git repository and build / install the kernel using Ubuntu 13.04's config file as usually do.</span><br />
<span style="line-height: 19px;">Kernel build / installation may be out of focus of this article. See other articles about kernel build / install from Ubuntu(e.g., <a href="http://dry-kiss.blogspot.kr/2014/01/how-to-build-install-linux-kernel-on.html">http://dry-kiss.blogspot.kr/2014/01/how-to-build-install-linux-kernel-on.html</a>).</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><span style="font-size: large;">11. Apply patches for Keyboard / Track pad / Speaker</span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">Keyboard / Track pad / Speaker still not works although you installed 3.11.0 kernel. But, there exist patches for those problems. Latest kernel maybe already merged those patches. But, because this is just my experience sharing, I will say about that.</span><br />
<span style="line-height: 19px;"><br /></span>
<span style="line-height: 19px;">Download links below and save each of them as file. The link is just a text file. You can just open the link in browser and copy-and-taste the contents, save as a text file.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span id="docs-internal-guid--67294f1-f7b8-a609-9c6e-feeefff3f35a"><span style="color: #1155cc; font-family: Arial; font-size: 15px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"><a href="http://www.miek.nl/downloads/2013/macbookair-3.11.patch" style="text-decoration: none;">http://www.miek.nl/downloads/2013/macbookair-3.11.patch</a></span></span><br />
<a href="https://bugzilla.kernel.org/attachment.cgi?id=107811">https://bugzilla.kernel.org/attachment.cgi?id=107811</a><br />
<br />
Go back to the kernel source you built and use command below to apply each patches:</div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span id="docs-internal-guid--67294f1-f7b9-3596-6115-56c0fc593858"><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;">$ patch -p1 < path/to/downloaded/patch</span></span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Now, build and install the patch applied kernel source again, boot to the kernel.</span><br />
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Now, Keyboard, Trackpad, Speaker problems all solved and works properly.</span><br />
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Wish your Happy Hacking! :D</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkh-IknSF9h6zT-csKXSK_lYE2b0-DT9XJZ25OqMnDEPLXsTGnBCLDsT4GwhFhiwV5yHlEjtREMpxlB7f7lu1ejg4pRSX9GKVKnYEBcDm0_Uwv4dAXSctrlsw7bAYzKlDNWLX1xWKqAm9Z/s1600/IMG_20130904_012054.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkh-IknSF9h6zT-csKXSK_lYE2b0-DT9XJZ25OqMnDEPLXsTGnBCLDsT4GwhFhiwV5yHlEjtREMpxlB7f7lu1ejg4pRSX9GKVKnYEBcDm0_Uwv4dAXSctrlsw7bAYzKlDNWLX1xWKqAm9Z/s320/IMG_20130904_012054.jpg" height="240" width="320" /></a></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<br /></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">Remaining Problem</span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Still one problem exist. Monitor brightness adjust button works well after MBA boot to linux. But, once it goes to sleep and comes back, monitor brightness become only brightest state or darkest state.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial;"><span style="font-size: 15px; white-space: pre-wrap;"><b>Referenced Web Pages</b></span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #1155cc; font-family: Verdana; font-size: 15px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"><a href="http://www.miek.nl/blog/archives/2013/08/31/macbook_air_61_2013_model_with_ubuntu/" style="text-decoration: none;">http://www.miek.nl/blog/archives/2013/08/31/macbook_air_61_2013_model_with_ubuntu/</a></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<br /></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span id="docs-internal-guid--67294f1-f7bc-c594-677e-89f07e05ba84"><span style="background-color: white; color: black; font-family: Verdana; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span></div>
<br />
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
</div>
<br />
<div dir="ltr" style="-webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<div style="margin: 0px;">
<a href="http://blogs.aerys.in/jeanmarc-leroux/2013/08/28/ubuntu-13-04-on-the-new-macbook-air-2013/" style="text-decoration: none;"><span style="background-color: white; color: #1155cc; font-family: Verdana; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://blogs.aerys.in/jeanmarc-leroux/2013/08/28/ubuntu-13-04-on-the-new-macbook-air-2013/</span></a></div>
</div>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-38042508060100577562013-10-20T15:26:00.001+09:002013-10-20T15:27:56.227+09:00GRAVITY<iframe allowfullscreen="" frameborder="0" height="270" src="//www.youtube.com/embed/ufsrgE0BYf0" width="480"></iframe><br />
<br />
<br />
[주의] 스포일러라면 스포일러라 할 내용이 있습니다.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
정리해 보자면 상처를 받고 자신의 근원(지구, 고향, 가족, 직장)을 떠나 일탈하던 여인이 일탈한 곳으로부터도 버림을 받고 헤매다가 결국은 친구의 희생과 자신의 근원에 대한 재인식으로 상처를 치유받고 돌아오게 되는 이야기.<br />
<br />
라이언은 딸을 잃는 아픔을 겪고 지구에서도 직장을 제외하면 정처없이 드라이브를 하며 방황했고, 우주로 일탈해 고요함이 가장 좋다고 이야기했다. 하지만 우주에서도 위성 파편이라는 형태로 버림을 받고 삶을 포기하려고도 하지만 맷의 희생으로 목숨을 건지고 지구에 대한 그리움과 다시 설 동기를 얻게 되어 지구로 돌아오게 된다.<br />
<br />
이를 통해 인간을 매개로 해 생명체와 그 근원과의 관계를 중심으로 생명체의 삶의 형태를 잘 그려낸, 다큐멘터리에 가까운 영화라고 생각한다.<br />
<br />
연어의 고향 회귀, 가출 청소년의 귀가 등의 다큐멘터리에 대입해보면 대략 비슷하다.<br />
<br />
뻔하다면 뻔하고 숭고하다면 숭고한 주제를 수많은 볼거리와 상징성 등을 통해 흥행적으로도 예술적으로도 손색이 없게 표현해낸 수작.SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-43000584103266595172013-09-07T18:38:00.000+09:002014-01-26T15:56:19.823+09:002013년 맥북에어에 우분투 13.04 + 리눅스 3.11 커널 설치(OSX과 듀얼 부팅)얼마 전, 별생각 없이 kernel.org 들어가보니 리눅스 3.11 official version이 릴리즈 되었더군요.<br />
<br />
그렇잖아도 지난 6월 사온 2013년 맥북에어에 리눅스를 깔아야지 깔아야지 하면서 깔지 않고 있었는데, 3.11도 나왔겠다 싶어 우분투 13.04를 설치하고 그 위에 리눅스 3.11을 컴파일해 설치했습니다.<br />
<br />
설치 과정 자체는 매끄럽지만 이후 문제가 몇가지 있고 이걸 하나하나 해결하는게 조금 귀찮기에, 설치과정부터 문제들을 해결한 과정을 기록 / 공유해 볼까 합니다.<br />
<br />
<br />
<span style="font-size: large;">0. 설치 환경</span><br />
제 맥북에어는 2013년형 11" 모델(6,1)이며, cpu와 RAM, SSD 용량을 모두 업그레이드했습니다.<br />
<br />
<span style="font-size: large;">1. ubuntu 설치 이미지 받아 cd 굽기</span><br />
우분투는 맥용 이미지를 따로 배포하고 있습니다. 다음의 링크를 가서 13.04 for mac 이미지(ubuntu-13.04-desktop-amd64+mac.iso)를 받아 cd를 굽습니다.<br />
<a href="http://releases.ubuntu.com/raring/">http://releases.ubuntu.com/raring/</a><br />
라이브 usb로 만들어도 될 것 같은데, 제 경우는 usb가 망가졌는지 제대로 진행이 되지 않아 라이브 CD를 굽고 USB CD 드라이브를 연결해서 설치를 진행했습니다.<br />
<br />
<span style="font-size: large;">2. SSD 파티션</span><br />
우분투를 설치하기 위한 파티션을 남겨줘야 합니다. 맥OSX으로 부팅된 상태에서 disk utility를 열고(찾기 어려우면 spotlight를 활용합시다) SSD를 선택하고 Partition 탭으로 들어가 Macintosh HD 파티션을 원하는 만큼만 남기고 파티션 크기를 줄여줍니다.<br />
어렵다면 다음 링크를 참고합니다. 움짤로 영어 몰라도 알 수 있게 설명해 줍니다.<br />
<a href="http://osxdaily.com/2009/11/20/resize-partitions-in-mac-os-x-with-disk-utility/">http://osxdaily.com/2009/11/20/resize-partitions-in-mac-os-x-with-disk-utility/</a><br />
<br />
<span style="font-size: large;">3. 설치 이미지로 부팅</span><br />
앞서 만든 라이브 CD 또는 라이브 USB를 꽂고, 맥북을 껐다 켜면서 Option(alt)키를 눌러 줍니다. 파워 버튼을 누르자마자 눌러줘야 합니다. 잘 안되면 파워 버튼 누르자마자부터 계속해서 Option 키를 강타해 줍니다. 그러면 사진과 같이, 어떤 파티션 또는 USB 또는 CD에서 부팅할지 선택할 수 있습니다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRxM5xPumASbi8Te1m2rPbV1aVT-EYDR4skhuBKOKi9jZ3MszEZ3GpkG6oIstFxm66p6irqGfwrfaxpFXVJW0HbixBhXhyxQaQbVZfRouZfL4O0WeJoSd9h9esyN_0jPXVnaSk3a21ssNs/s1600/photo+(2).jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRxM5xPumASbi8Te1m2rPbV1aVT-EYDR4skhuBKOKi9jZ3MszEZ3GpkG6oIstFxm66p6irqGfwrfaxpFXVJW0HbixBhXhyxQaQbVZfRouZfL4O0WeJoSd9h9esyN_0jPXVnaSk3a21ssNs/s320/photo+(2).jpg" height="208" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Mac OSX은 다른 매체에서 부팅하려 하면 무조건 Windows로 생각하는 모양인데, 좀 아니꼽지만 선택해 주면 라이브 CD에서 우분투가 부팅됩니다.<br />
<br />
사실 좀 이따 설명할 rEFIt를 설치하면 option 키 누를 필요 없는데, 제가 깜빡하고 그렇게 진행했으니 그냥 제가 한 순서대로 설명합니다.<br />
<br />
<span style="font-size: large;">4. 우분투 설치</span><br />
설치는 기존에 하던대로 진행합니다.<br />
다만, 중간에 Mac OSX을 발견했는데, 그거 지우고 설치할지 그거 놔두고 옆에다 설치할지 물어봅니다만, 듀얼부팅 할 생각이시라면 당연히 놔두고 옆에다 설치해 달라고 하셔야 합니다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEyqpwGDdbr8WgiIBwTP7ACEvlgg1ezywogBuj9BlsLokUU8XJqIJ4uKKr6WW5s_Z1w3qTFyafGWvB8Qh-4DRiB6GMF_7qCmQQRvtWOOolZav6rK0zKwG4aDXRpsdLee6DuZIduecO9s-L/s1600/IMG_20130903_212731.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEyqpwGDdbr8WgiIBwTP7ACEvlgg1ezywogBuj9BlsLokUU8XJqIJ4uKKr6WW5s_Z1w3qTFyafGWvB8Qh-4DRiB6GMF_7qCmQQRvtWOOolZav6rK0zKwG4aDXRpsdLee6DuZIduecO9s-L/s320/IMG_20130903_212731.jpg" height="224" width="320" /></a></div>
<br />
<span style="font-size: large;">5. rEFIt 설치</span><br />
설치가 완료되고 재부팅을 하면 OSX으로 부팅됩니다. 우분투로 부팅하려면 3번 과정에서처럼 다시 파워를 켜자마자 option 키를 눌러 부팅할 파티션을 선택해 줘야 합니다.<br />
아무래도 귀찮으므로, rEFIt를 설치합니다. rEFIt는 부트 옵션 선택/관리 프로그램으로, 다음 링크에서 받을 수 있습니다.<br />
<a href="http://refit.sourceforge.net/#download">http://refit.sourceforge.net/#download</a><br />
다운로드된 rEFIt를 실행하고 설치 파일을 실행하면 rEFIt가 설치됩니다. 이제 껐다 켜면 기존처럼 무작정 OSX으로 부팅하지 않고, 어느 파티션으로 부팅할지 물어봅니다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOw4q-Y8Lk9e7ELIaHmGp2dQ2HQE5qGJSms99mHyIQL4w3NhHtshRLHHO2jARv2Tzy2gJW1-D56q5BqwhwTJZIBdAf46GBIQ8c7fmMLnyhBDHtbOG9ItxHhSFbMf6yVsgw279ym1j17uv6/s1600/IMG_20130903_214308.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOw4q-Y8Lk9e7ELIaHmGp2dQ2HQE5qGJSms99mHyIQL4w3NhHtshRLHHO2jARv2Tzy2gJW1-D56q5BqwhwTJZIBdAf46GBIQ8c7fmMLnyhBDHtbOG9ItxHhSFbMf6yVsgw279ym1j17uv6/s320/IMG_20130903_214308.jpg" height="230" width="320" /></a></div>
<br />
여기서 리눅스를 선택하면 grub 부트로더가 뜨고, 여기서 우분투를 선택하면 우분투로 부팅... 되어야겠지만 세상 일이 그렇게 쉽지 않고, 부팅 안되고 화면이 멈춥니다.<br />
<br />
참고로, rEFIt는 더이상 개발자가 지원하지 않고 있고, rEFInd라는 프로그램으로 개발되고 있는데, 그걸 쓰는게 나을 것 같습니다. 전 쓰던 게 기억나서 그냥 rEFIt를 썼습니다.<br />
<br />
<span style="font-size: large;">6. linux parameter에 nosmp를 추가</span><br />
grub 화면에서 e 키를 누르면 부트 패러미터를 조정할 수 있습니다.<br />
여기서 패러미터에 nosmp를 추가해 주면 부팅할 수 있습니다.<br />
<br />
밑에서 두번째 줄 정도에 다음과 같은 내용으로 시작하는 줄이 있을 텐데,<br />
<span style="font-family: Courier New, Courier, monospace;">linux /boot/vmlinuz-3.8.0 root=UUID=</span><br />
<br />
줄의 마지막에 한칸 띄고 nosmp만 추가하면 됩니다.<br />
그리고, f10 키를 누르면 이제 우분투로 부팅 됩니다.<br />
<br />
<span style="font-size: large;">7. nosmp를 영구 추가</span><br />
이제 우분투로 부팅이 되었지만, 앞으로도 우분투로 부팅할 때마다 grub에서 nosmp를 입력해야 합니다. 번거로우니까, grub이 항상 nosmp를 추가해 부팅하도록 설정합니다.<br />
<span id="docs-internal-guid--67294f1-f7a9-64e8-82b4-6b82a2d89006"><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;"> /etc/default/grub</span></span><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> 파일을 열면 </span><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;">GRUB_CMDLINE_LINUX_DEFAULT="</span></span><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> 으로 시작하는 줄이 있는데, 여기에 따옴표 안에 nosmp를 넣어줍니다. 이 파일은 관리자 권한으로만 수정되므로, 이에 유의합니다.</span></span><br />
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">수정이 끝났으면 다음 명령으로 grub 설정을 업데이트 해줍니다.</span><br />
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;">$ sudo update-grub</span></span><br />
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span>
<span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">8. 네트워크 되도록 수정</span></span><br />
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이제 부팅은 껐다 켜도 잘 되지만, 일단 네트워크가 안됩니다. 우분투 13.04에 맥북에어의 무선네트워크 장치 드라이버가 없기 때문입니다. 다음의 링크에서 deb를 받습니다.</span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<a href="https://launchpad.net/ubuntu/saucy/amd64/bcmwl-kernel-source/6.30.223.30+bdcom-0ubuntu3" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://launchpad.net/ubuntu/saucy/amd64/bcmwl-kernel-source/6.30.223.30+bdcom-0ubuntu3</span></a><span style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<span id="docs-internal-guid--67294f1-f7ac-590d-2c56-54f913fbdf5a"><span style="color: #1155cc; font-family: Arial; font-size: 15px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"><a href="http://launchpadlibrarian.net/138967184/dkms_2.2.0.3-1.1ubuntu3_all.deb" style="text-decoration: none;">http://launchpadlibrarian.net/138967184/dkms_2.2.0.3-1.1ubuntu3_all.deb</a></span></span><br />
받은 deb 파일을 다음 명령으로 설치하고, 리부팅 하면 네트워크가 됩니다.<br />
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;">$ sudo dpkg -i 다운로드/받은/deb의/경로</span></span><br />
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span>
<span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">9. EFI 모드로 수정</span></span><br />
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">앞서 nosmp를 패러미터에 추가한 것은 맥북에어의 코어들 중 하나만 쓰겠다는 의미로, 맥북에어가 bios 방식의 부팅을 제대로 지원하지 않아 임시 처방으로 그렇게 한 것입니다.</span><br />
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">멀티 코어 시대에 코어 4개짜리 컴퓨터에서 코어 하나만 쓰는 것은 아까운 일입니다. </span><span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">리눅스를 EFI 모드로 부팅시키면 코어를 모두 쓸 수 있습니다.</span><br />
<span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">다음 링크를 참고해 우분투를 EFI 모드로 변경해 줍니다.</span><br />
<span id="docs-internal-guid--67294f1-f7b0-d6cd-3e64-9a2dfd7774b6"><span style="color: #1155cc; font-family: Arial; font-size: 15px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"><a href="https://help.ubuntu.com/community/UEFI#Converting_Ubuntu_into_EFI_mode" style="text-decoration: none;">https://help.ubuntu.com/community/UEFI#Converting_Ubuntu_into_EFI_mode</a></span></span><br />
<br />
해당 링크의 내용을 간략히 설명하면, 다음 명령으로 boot-repair 라는 프로그램을 설치하고,<br />
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><span style="font-family: Courier New, Courier, monospace;">sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update</span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><span style="font-family: Courier New, Courier, monospace;">sudo apt-get install -y boot-repair && (boot-repair &)</span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">이 프로그램을 실행해서 우분투를 EFI 모드로 변경하는 방식입니다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">이제 부팅하면 다음 그림과 같이 여러 부팅 옵션을 볼 수 있습니다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">EFI 모드로 우분투를 부팅합시다.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzRyah8pF3GKcQdS3JOodhLZ8olt-D0D6C30H1hgN02VxraXTWGc99AwMETQ2-p9JS4Ldcwj5lXfpCFB-pUgSXKIcTwCBiSkHyr2y3drP0MUtnePtRbDBfiC8IjWu2R2SkHISCTjp8Pabp/s1600/IMG_20130903_223044.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzRyah8pF3GKcQdS3JOodhLZ8olt-D0D6C30H1hgN02VxraXTWGc99AwMETQ2-p9JS4Ldcwj5lXfpCFB-pUgSXKIcTwCBiSkHyr2y3drP0MUtnePtRbDBfiC8IjWu2R2SkHISCTjp8Pabp/s320/IMG_20130903_223044.jpg" height="232" width="320" /></a></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">이제 네개의 코어를 모두 쓸 수 있습니다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">그리고, 부팅 시 에러메세지 같은게 보여서 조금 성가실 수 있는데, 그렇다면 다시 <span style="font-family: Courier New, Courier, monospace;">/etc/default/grub</span>을 열고 이번엔 <span style="font-family: Courier New, Courier, monospace;">libata.force=noncq</span> 라는 내용을 아까 <span style="font-family: Courier New, Courier, monospace;">nosmp</span> 넣었듯이 넣어줍니다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">수정한 후에는<span style="font-family: Courier New, Courier, monospace;"> sudo update-grub</span>을 잊지 않도록 합니다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><span style="font-size: large;">10. 3.11 커널 설치</span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">아직 fn키가 제대로 인식되지 않고 트랙패드도 두손가락 스크롤링이 안되는등 문제가 있지만, 여기서 곧바로 3.11 커널로 넘어가 봅시다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">3.11 커널 소스를 받고 이미 깔려 있는 우분투 13.04의 config 파일을 이용해 config 파일을 만들고 빌드, 설치해 줍니다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">커널 컴파일 방법에 대해서는 다른 글(<a href="http://dry-kiss.blogspot.kr/2014/01/debian-deb.html">http://dry-kiss.blogspot.kr/2014/01/debian-deb.html</a>)을 참고해 봅시다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;"><span style="font-size: large;">11. 키보드 / 트랙패드, 내장스피커 문제 패치 적용</span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">3.11 커널을 올려도 키보드 / 트랙패드 문제는 여전하고, 내장스피커가 동작하지 않습니다. 헤드셋을 연결하거나 해야만 음악 등을 들을 수 있습니다. 이에 대한 패치를 적용해야 합니다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="line-height: 19px;">다음 링크들을 다운받아 적당한 이름으로 저장합니다. 그냥 텍스트 파일입니다. 그냥 링크를 열고 내용을 긁어서 적당한 텍스트 파일로 저장해도 됩니다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span id="docs-internal-guid--67294f1-f7b8-a609-9c6e-feeefff3f35a"><span style="color: #1155cc; font-family: Arial; font-size: 15px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"><a href="http://www.miek.nl/downloads/2013/macbookair-3.11.patch" style="text-decoration: none;">http://www.miek.nl/downloads/2013/macbookair-3.11.patch</a></span></span><br />
<a href="https://bugzilla.kernel.org/attachment.cgi?id=107811">https://bugzilla.kernel.org/attachment.cgi?id=107811</a><br />
<br />
아까 컴파일한 커널 소스 경로로 이동해서 다음 명령으로 각각의 패치를 적용합니다.</div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span id="docs-internal-guid--67294f1-f7b9-3596-6115-56c0fc593858"><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: Courier New, Courier, monospace;">$ patch -p1 < 다운받은/패치의/경로</span></span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이제 커널 소스에 패치가 적용되었으니, 다시 컴파일, 설치하고 재설치된 커널로 부팅합니다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이제 키보드, 트랙패드, 내장 스피커 모두 정상 동작합니다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">사진이 좀 흔들렸지만, 2013년 11" 맥북에어 모델에 3.11 커널이 돌아감을 인증샷 한번 찍어봤습니다 :)</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkh-IknSF9h6zT-csKXSK_lYE2b0-DT9XJZ25OqMnDEPLXsTGnBCLDsT4GwhFhiwV5yHlEjtREMpxlB7f7lu1ejg4pRSX9GKVKnYEBcDm0_Uwv4dAXSctrlsw7bAYzKlDNWLX1xWKqAm9Z/s1600/IMG_20130904_012054.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkh-IknSF9h6zT-csKXSK_lYE2b0-DT9XJZ25OqMnDEPLXsTGnBCLDsT4GwhFhiwV5yHlEjtREMpxlB7f7lu1ejg4pRSX9GKVKnYEBcDm0_Uwv4dAXSctrlsw7bAYzKlDNWLX1xWKqAm9Z/s320/IMG_20130904_012054.jpg" height="240" width="320" /></a></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<br /></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">남은 문제들</span></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">하지만 아직 문제가 하나 더 남아있는데요. </span><span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">처음 부팅했을 때에는 모니터 밝기 조정 버튼이 잘 동작하지만, 한번 sleep에 빠졌다가 돌아오면 모니터 밝기가 가장 밝거나 가장 어둡거나 두가지로만 동작합니다.</span><br />
<span style="font-family: Arial; font-size: 15px; white-space: pre-wrap;">사실 이정도면 사소한 문제 수준이라 전 큰 불편 없이 쓰고 있습니다만, 혹시 맥북에어에 리눅스 설치를 생각중인 분들은 고민해 보시기 바랍니다.</span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"><b>참고 웹페이지</b></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #1155cc; font-family: Verdana; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"><a href="http://www.miek.nl/blog/archives/2013/08/31/macbook_air_61_2013_model_with_ubuntu/" style="text-decoration: none;">http://www.miek.nl/blog/archives/2013/08/31/macbook_air_61_2013_model_with_ubuntu/</a></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<br /></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<b id="docs-internal-guid--67294f1-f7bc-c594-677e-89f07e05ba84" style="font-weight: normal;"><span style="background-color: white; color: black; font-family: Verdana; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<a href="http://blogs.aerys.in/jeanmarc-leroux/2013/08/28/ubuntu-13-04-on-the-new-macbook-air-2013/" style="text-decoration: none;"><span style="background-color: white; color: #1155cc; font-family: Verdana; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://blogs.aerys.in/jeanmarc-leroux/2013/08/28/ubuntu-13-04-on-the-new-macbook-air-2013/</span></a></div>
<div dir="ltr" style="margin-bottom: 6pt; margin-top: 0pt;">
<br /></div>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com8tag:blogger.com,1999:blog-7298843278162929459.post-53079638458451776922013-08-18T17:56:00.001+09:002013-08-18T17:56:56.705+09:00monkeyrunner에서 MOVE 타입 이용해 복잡한 입력 재현하기<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXdR1t7fRUl4Xiy2YOUTTIhgqTI72HhSsIhXQvr7KZKhe9qcmXk57mE2ho7Py0kaffZFnoq8SvWyxemFob3ruyJz1nzmGKBVOU58Q4HSyGB7ixBOZErBDPX4t3ad_0hEFhmwNDDXksoIo7/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXdR1t7fRUl4Xiy2YOUTTIhgqTI72HhSsIhXQvr7KZKhe9qcmXk57mE2ho7Py0kaffZFnoq8SvWyxemFob3ruyJz1nzmGKBVOU58Q4HSyGB7ixBOZErBDPX4t3ad_0hEFhmwNDDXksoIo7/s320/4.jpg" width="212" /></a></div>
<div style="text-align: center;">
<span style="font-size: xx-small;">(이미지 출처: <a href="http://pcdn.500px.net/14898503/aa61b81170e21e78e3c11d1bb2ecf9b05232cf3e/4.jpg">http://pcdn.500px.net/14898503/aa61b81170e21e78e3c11d1bb2ecf9b05232cf3e/4.jpg</a>)</span></div>
<br />
monkeyrunner를 이용하면 아주 간단하게 안드로이드 기기를 제어할 수 있습니다.<br />
하지만 MOVE 이벤트를 지원하지 않고, 단순히 한 지점에서 다른 지점으로의 drag만을 지원하고 있었기에, monkeyrunner를 이용해 사람의 입력을 똑같이 재현할 수 없는 문제점이 있었습니다.<br />
<br />
해서, MOVE 이벤트를 지원하도록 monkeyrunner를 약간 수정, AOSP에 컨트리뷰션했고, 곧바로 merge 되었습니다.<br />
(<a href="https://android-review.googlesource.com/#/c/50991/">https://android-review.googlesource.com/#/c/50991/</a>)<br />
<br />
그리고 한참 잊고 있었는데, 얼마 전에 어떤 외국인이 최신 버전 monkeyrunner에서 해당 기능이 제대로 들어갔는지, 어떻게 쓰면 되는지 스택오버플로에 질문을 올리고 제게도 메일을 보냈더군요.<br />
(<a href="http://stackoverflow.com/questions/18161416/android-monkey-runner-touch-with-move">http://stackoverflow.com/questions/18161416/android-monkey-runner-touch-with-move</a>)<br />
<br />
확인해보니 당연하게도 해당 기능이 최신 버전 monkeyrunner에는 들어간 채로 배포되고 있습니다.<br />
해서 간단한 예제를 작성, 공유했는데, 여기서도 공유해 봅니다.<br />
<br />
<script src="https://gist.github.com/sjp38/6202539.js"></script>
<br />
단순히 touch 함수에 DOWN, UP 처럼 MOVE로 타입만 주시면 됩니다. 간단하죠? ;)SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-21593162613925001372013-08-09T14:50:00.004+09:002013-08-09T14:50:43.650+09:00색채가 없는 다자키 쓰쿠루와 그가 순례를 떠난 해<span style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;">간만의 하루키 작품, 한권이라는 비교적 적은 분량에 이틀만에 읽어버렸네요.</span><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;" /><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;" /><span style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;">기존 작품들이 너무 잔혹했던 것도 같지만 그에 비해 육체적으로도 정신적으로도 덜 자극적인 편이라 약간 아쉬우면서도 가볍게 읽기에 좋습니다.</span><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;" /><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;" /><span style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;">하지만 열린 결말임에도 관련 추측을 위한 떡밥이 너무 제한되어 있어 조금은 너무 짧고 정리가 덜된 것 아닌가 하는 느낌도 들었습니다.</span><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;" /><br style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;" /><span style="background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;">그렇다 해도 역시 하루키 특유의 맛은 분명하게 내고 있기에 가벼운 마음으로 짧게 읽기엔 좋은 책 같네요.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifDosWo2TkswCq_8ryu_Joa0W9SAaj1DeBxYcHkNhcEilKbYW1eQa_ZNAR1CYJsxtKSTG9Yk9-dPXvB4J3VBsFU0OHXG1WCkEyXlaulSiEBXUt2LYbSAqnLM2QjMiJi0kV21gjdfp0yeiY/s1600/IMG_20130808_200942.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifDosWo2TkswCq_8ryu_Joa0W9SAaj1DeBxYcHkNhcEilKbYW1eQa_ZNAR1CYJsxtKSTG9Yk9-dPXvB4J3VBsFU0OHXG1WCkEyXlaulSiEBXUt2LYbSAqnLM2QjMiJi0kV21gjdfp0yeiY/s320/IMG_20130808_200942.jpg" width="320" /></a></div>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-20161971264184282082013-07-04T19:37:00.000+09:002013-07-04T19:37:16.569+09:00android linux module 설치 시 vermagic 문제 해결android에 kernel module 올리기(<a href="http://dry-kiss.blogspot.kr/search?updated-max=2013-07-04T11:23:00%2B09:00&max-results=1">http://dry-kiss.blogspot.kr/search?updated-max=2013-07-04T11:23:00%2B09:00&max-results=1</a>) 에 이어 작성한 글인데 올리지 않고 있다가 이제서야 포스팅.<br />
<br />
android용 linux module 설치 시, module의 vermagic 이 맞지 않아 설치가 안되는 경우가 있다.<br />
<br />
예를 들면 다음과 같은 메세지가 커널 메세지에 나오고, insmod에 실패한다.<br />
<br />
<span style="background-color: #eeeeee; font-family: Courier New, Courier, monospace;">version magic '2.6.29-12345 mod_unload ARMv7' should be '2.6.29-13579 mod_unload ARMv7'</span><br />
<br />
이 경우, 커널 소스의 Makefile 의 최상단에 있는 <span style="background-color: #eeeeee; font-family: Courier New, Courier, monospace;">EXTRAVERSION</span>을 수정함으로써 vermagic의 리눅스 버전 다음 문자열을 바꿀 수 있다.<br />
<br />
하지만, 이렇게 변경한 내용을 commit 하지 않으면 다음과 같이 기존 버전넘버와 -dirty 라는 이상한 문자가 붙게 되어 여전히 insmod 에 실패한다.<br />
<span style="background-color: #eeeeee; font-family: Courier New, Courier, monospace;">2.6.29abcd-ge3d684d-dirty mod_unload ARMv7</span><br />
<br />
이는 <span style="font-family: Courier New, Courier, monospace;">scripts/setlocalversion</span> 파일에서 <span style="font-family: Courier New, Courier, monospace;">git commit</span> 되지 않은 변경사항이 있으면 자동으로 넣어주는 내용이다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFfnJDk_9PLqOw3GMC7e96TWvmQQjr2IzVT1hYyJ2vS1Y7FJ81YL7K6x74c8E8AKT7IER9l9R5eSTcstsJqlsAXhdQ3AA57DLm14pzv29UUQbssb1SThcMapMLUMcHdyuCOKwJVgLGCqUK/s657/Screenshot+from+2013-07-04+19:34:28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFfnJDk_9PLqOw3GMC7e96TWvmQQjr2IzVT1hYyJ2vS1Y7FJ81YL7K6x74c8E8AKT7IER9l9R5eSTcstsJqlsAXhdQ3AA57DLm14pzv29UUQbssb1SThcMapMLUMcHdyuCOKwJVgLGCqUK/s400/Screenshot+from+2013-07-04+19:34:28.png" width="400" /></a></div>
<br />
따라서, 해당 파일에서 version magic을 수정하는 부분을 주석 처리하거나, EXTRAVERSION을 변경한 내용을 커밋해 주면 된다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUbKimRpkeyU2FDs9tVZiM12CMRqI_OgU8iulYD0Q6JEzk2Ga-DLfosT4xXEK8v_Lgy7lsUKHBIKmSNfwSSOCDdaFGz3Y-O2BffQKogS4ikkQMyqEAc0hz4LBoZEsqlfKWV6YdsIEx7D1A/s954/Screenshot+from+2013-07-04+19:26:53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUbKimRpkeyU2FDs9tVZiM12CMRqI_OgU8iulYD0Q6JEzk2Ga-DLfosT4xXEK8v_Lgy7lsUKHBIKmSNfwSSOCDdaFGz3Y-O2BffQKogS4ikkQMyqEAc0hz4LBoZEsqlfKWV6YdsIEx7D1A/s400/Screenshot+from+2013-07-04+19:26:53.png" width="400" /></a></div>
<br />
<br />
<a href="http://forum.xda-developers.com/showthread.php?t=1236576">http://forum.xda-developers.com/showthread.php?t=1236576</a><br />
<a href="http://www.tldp.org/LDP/lkmpg/2.6/html/x380.html">http://www.tldp.org/LDP/lkmpg/2.6/html/x380.html</a>SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-22092234494725504362013-07-04T11:23:00.003+09:002013-07-09T15:32:51.002+09:00vim에서 spell checktex 으로 글을 쓰게 되면 spelling check가 조금 귀찮은데,<br />
vim으로 글을 쓴다면 vim에서 쉽게 spelling check를 할 수 있다.<br />
<br />
명령모드에서<br />
<span style="background-color: #eeeeee; font-family: Courier New, Courier, monospace;">:set spell spelllang=<language of this text. i.e., en_us></span><br />
해주면 스펠링이 잘못된 단어가 빨갛게 빛난다.<br />
<br />
커서를 해당 단어에 위치하고<br />
<span style="background-color: #eeeeee; font-family: Courier New, Courier, monospace;">z=</span><br />
를 입력하면 수정할 단어 목록을 보여주고 쉽게 수정할 단어를 선택할 수 있다.<br />
<br />
해제할 땐<br />
<span style="background-color: #eeeeee; font-family: Courier New, Courier, monospace;">:nospell</span><br />
<br />
<br />
참고 사이트:<br />
<br />
<ul>
<li><a href="https://www.linux.com/learn/tutorials/357267:using-spell-checking-in-vim">https://www.linux.com/learn/tutorials/357267:using-spell-checking-in-vim</a></li>
</ul>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-41262598175312754732013-03-11T22:06:00.000+09:002013-07-25T16:18:37.974+09:00android emulator에 kernel module 올리기<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLttErBlq3f0mJUJqW0ZcPOytexgcWaS93-31KGnB8zSzXymuM7ABG1WH21CHhgBD7puOud4I-9TZoSamYdyPyqmHaiDIHYBIMZOmZ0Z42MUQI3G0QGaOaYhDfd7hVPl3IxAH_CNlMfbtw/s1600/goldfishkernelmodule.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="161" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLttErBlq3f0mJUJqW0ZcPOytexgcWaS93-31KGnB8zSzXymuM7ABG1WH21CHhgBD7puOud4I-9TZoSamYdyPyqmHaiDIHYBIMZOmZ0Z42MUQI3G0QGaOaYhDfd7hVPl3IxAH_CNlMfbtw/s320/goldfishkernelmodule.png" width="320" /></a></div>
<br />
안드로이드는 커널로 리눅스를 사용하므로, 리눅스에서와 같이 커널 모듈을 만들어 올림으로써 커널 레벨로의 접근이 가능하다.<br />
<br />
안드로이드 에뮬레이터에 커널 모듈을 만들어 올리는 간단한 방법을 기록해 둔다.<br />
<br />
안드로이드용 에뮬레이터를 위한 가상 하드웨어의 이름은 goldfish다. 따라서, 이 글에서는 앞으로 안드로이드용 에뮬레이터의 커널을 goldfish 커널이라 부른다.<br />
<br />
<span style="font-size: large;">0. 환경</span><br />
사용된 기기 / 소프트웨어 버전은 다음과 같다.<br />
<span style="font-family: Courier New, Courier, monospace;">ubuntu 12.04 desktop 64bit</span><br />
<span style="font-family: Courier New, Courier, monospace;">git 1.7.9.5</span><br />
<br />
사용된 에뮬레이터의 안드로이드 버전:<br />
<span style="font-family: Courier New, Courier, monospace;">4.2.1_r1</span>과 <span style="font-family: Courier New, Courier, monospace;">4.2.2</span> 사이 언젠가 sync 해둔 <span style="font-family: Courier New, Courier, monospace;">AOSP master branch</span>.<br />
<br />
<span style="font-size: large;">1. goldfish 커널 빌드 & 사용</span><br />
goldfish 커널은 기본적으로 모듈을 지원하지 않는다.<br />
따라서 커널 소스코드를 받아 모듈을 지원하도록 설정을 수정, 빌드해 올리고 여기에 모듈을 올린다.<br />
<br />
<b>1.1. 안드로이드 에뮬레이터 커널 소스 받기</b><br />
<span style="font-family: Courier New, Courier, monospace;">$ git clone https://android.googlesource.com/kernel/goldfish</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ git checkout android-goldfish-2.6.29</span><br />
(checkout 하는 브랜치는 적당히. $ git branch -r 명령으로 사용 가능한 브랜치를 볼 수 있다)<br />
<br />
<b>1.2. prebuilt 소스 받기</b><br />
크로스 컴파일을 위해 prebuilt 를 받아야 한다.<br />
<span style="font-family: Courier New, Courier, monospace;">$ git clone https://android.googlesource.com/platform/prebuilt</span><br />
<br />
<b>1.3. kernel build configuration 설정</b><br />
리눅스 커널은 빌드 설정을 다양하게 할 수 있으며, 이 정보는 소스코드 디렉토리의 .config 파일에 저장된다. 하지만, 앞서 받아온 소스파일에는 .config가 없다.<br />
아래의 명령으로 goldfish를 위한 기본 설정을 만든다.<br />
<span style="font-family: Courier New, Courier, monospace;">$ make goldfish_defconfig</span><br />
<br />
이제 .config 파일이 만들어졌을 것이다.<br />
또는, 다음의 명령으로 이미 돌고 있는 에뮬레이터의 설정을 가져올 수도 있다.<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">$ adb pull /proc/config.gz</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ gunzip config.gz</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ mv config .config</span><br />
<br />
<b>1.4. MODULE을 지원하는 방식으로 빌드되도록 설정</b><br />
.config 파일을 열고 다음의 내용을 추가한다.<br />
<span style="font-family: Courier New, Courier, monospace;">CONFIG_MODULES=y</span><br />
<span style="font-family: Courier New, Courier, monospace;">CONFIG_MODULES_FORCE_LOAD=y</span><br />
<span style="font-family: Courier New, Courier, monospace;">CONFIG_MODULES_UNLOAD=y</span><br />
<span style="font-family: Courier New, Courier, monospace;">CONFIG_MODULES_FORCE_UNLOAD=y</span><br />
<br />
CONFIG_MODULE_UNLOAD를 설정하지 않으면 모듈을 적재 후 내릴 수가 없다. 유의하자.<br />
<br />
<b>1.5. 안드로이드 에뮬레이터 커널 빌드</b><br />
이건 그냥 s.android.com을 따라하면 되는데... 요약하자면,<br />
<span style="font-family: Courier New, Courier, monospace;">$ ARCH=arm CROSS_COMPILE=<path to prebuilt we downloaded above>/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- make -j2</span><br />
ARCH, CROSS_COMPILE은 따로 export ARCH=arm 과 같은 식으로 하고 마지막에 make만 하는 것도 당연히 가능...<br />
CROSS_COMPILE 에 주는 prebuilt 위치는 앞서 1.2에서 받은 prebuilt임.<br />
<br />
빌드가 끝나면 zImage로 커널 이미지가 나옴.<br />
<br />
<b>1.6. 에뮬레이터에서 새로 빌드한 커널을 사용</b><br />
다음의 커맨드로 에뮬레이터가 사용할 커널을 지정 가능.<br />
<span style="font-family: Courier New, Courier, monospace;">$ emulator -kernel <path of kernel image></span><br />
-show-kernel 과 -verbose 옵션을 추가로 주면 여러모로 편리하다.<br />
<br />
<span style="font-size: large;">2. 안드로이드용 커널 모듈 빌드</span><br />
이제 안드로이드용 커널 모듈을 만들어보자.<br />
<b>2.1. 커널 모듈 소스코드</b><br />
다음과 같이 android_module.c 파일을 생성<br />
<br />
<script src="https://gist.github.com/sjp38/6077499.js"></script>
<div>
<br /></div>
<div>
구체적인 linux kernel module 의 동작 원리는 이 글의 주제가 아니므로 스킵...</div>
<div>
위 소스코드는 커널에 적재될 때 "Hello android kernel..." 메세지를, 커널에서 삭제될 때 "Goodbye android kernel..." 라는 메세지를 커널 로그 상에 뱉을 것이다.</div>
<div>
실제 동작 코드는 각자의 목적에 맞게 바꾸면 되겠다.</div>
<br />
<br />
<b>2.2. 커널 모듈 빌드를 위한 Makefile 작성</b><br />
다음과 같은 내용으로 Makefile을 생성.<br />
4, 7라인의 -C 옵션의 값은 커널 소스가 있는 경로를 나타내야 한다.<br />
<br />
<script src="https://gist.github.com/sjp38/6077516.js"></script>
<br />
<b>2.3. 커널 모듈 빌드</b><br />
다음과 같이 ARCH, CROSS_COMPILE 환경 변수 설정 후 make 하면 간단하게 끝.<br />
커널 컴파일 할 때와 거의 같다.<br />
<span style="font-family: Courier New, Courier, monospace;">$ ARCH=arm CROSS_COMPILE=<path to prebuilt we downloaded above>/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- make</span><br />
<br />
같은 경로에 android_module.ko가 만들어질 것이다.<br />
<br />
<span style="font-size: large;">3. 커널 모듈 로드</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ adb push android_module.ko /data/</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ adb shell</span><br />
<span style="font-family: inherit;">(이제 android의 shell 위임)</span><br />
<span style="font-family: Courier New, Courier, monospace;"># insmod /data/android_module.ko</span><br />
<br />
dmesg 등의 커맨드로 커널 로그를 확인해 보면 Hello android kernel... 메세지가 보일 것이다.<br />
<br />
<span style="font-size: large;">4. 커널 모듈 언로드</span><br />
<span style="font-family: Courier New, Courier, monospace;">$ adb shell</span><br />
<span style="font-family: Courier New, Courier, monospace;"># rmmod android_module</span><br />
역시 dmesg 등의 커맨드로 커널 로그를 확인해 보면 Goodbye android kernel... 메세지가 보일 것이다.<br />
<br />
<br />
* 이 과정대로만 따라할 경우 vermagic에 의해 module load에서 문제를 겪는 경우가 생길 수 있다.<br />
이 경우는 다음 글을 참고하면 된다.<br />
<a href="http://dry-kiss.blogspot.kr/2013/07/android-linux-module-vermagic.html">http://dry-kiss.blogspot.kr/2013/07/android-linux-module-vermagic.html</a><br />
<br />
<br />
참고 자료:<br />
<a href="http://linuxclues.blogspot.kr/2010/05/build-compile-linux-kernel-android.html">http://linuxclues.blogspot.kr/2010/05/build-compile-linux-kernel-android.html</a><br />
<a href="http://stackoverflow.com/questions/6282669/how-do-you-create-a-loadable-kernel-module-for-android">http://stackoverflow.com/questions/6282669/how-do-you-create-a-loadable-kernel-module-for-android</a><br />
<a href="http://s.android.com/">http://s.android.com/</a>SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com1tag:blogger.com,1999:blog-7298843278162929459.post-62264790655107594022012-10-16T16:55:00.000+09:002012-10-23T13:31:54.746+09:00리눅스에 패치 업로드 하기<b id="internal-source-marker_0.24705196963623166" style="font-family: Arial; font-weight: normal;"></b><br />
<div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<b id="internal-source-marker_0.24705196963623166" style="font-family: Arial; font-weight: normal;"><span style="font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: x-large;">리눅스에 패치 업로드 하기</span></span></b></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-top: 0pt; text-align: right;">
<b id="internal-source-marker_0.24705196963623166" style="font-family: Arial; font-weight: normal;"><span style="vertical-align: baseline; white-space: pre-wrap;">Author : SeongJae Park <</span><a href="mailto:sj38.park@gmail.com"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">sj38.park@gmail.com</span></a><span style="vertical-align: baseline; white-space: pre-wrap;">></span></b></div>
<b id="internal-source-marker_0.24705196963623166" style="font-family: Arial; font-weight: normal;"><span style="font-size: 15px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"></span><br /></b>
<br />
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<b id="internal-source-marker_0.24705196963623166" style="font-family: Arial; font-weight: normal;"><span style="font-weight: bold; vertical-align: baseline; white-space: pre-wrap;">이 저작물은 크리에이티브 커먼즈 [저작자표시-동일조건변경허락 2.0 대한민국 라이선스]에 따라 이용할 수 있습니다.</span></b></div>
<b id="internal-source-marker_0.24705196963623166" style="font-family: Arial; font-weight: normal;">
</b>
<br />
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<b id="internal-source-marker_0.24705196963623166" style="font-family: Arial; font-weight: normal;"><img height="141px;" src="https://lh5.googleusercontent.com/VonTW66ewA4596GHglisk__mIepAPm5RGg58giDBCjsauQt6ynv4h6EIWAPuoQqqUL30S6_NAwVNVO4zms3XwqCncL17yYZsG9dEcMPUuGqCDZv_bFc" width="403px;" /><span style="font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"></span></b></div>
<b id="internal-source-marker_0.24705196963623166" style="font-family: Arial; font-weight: normal;">
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">지난 10월 11일~12일, 서울시 JW marriott 호텔에서 Korea Linux Forum 2012 행사가 있었습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">여러가지 좋은 발표와 강의, 대담등이 있었습니다만, Write and submit your first Linux kernel patch 라는 제목의, 리눅스 staging 트리를 관리하는 Greg Kroah-Hartman 의 발표는 개인적으로 가장 인상깊은 발표 중 하나였습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">발표 능력도 인상깊었고, 발표 내용 또한 상당히 유익했기에, 한국어로 해당 발표의 내용을 한글 문서로 정리해 보는 것은 리눅스에 컨트리뷰션을 하고자 하는 많은 한국 개발자에게 도움이 될 수 있지 않을까 싶어 문서로 정리해 봅니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Greg Kroah-Hartman 의 발표 문서는 </span><a href="https://github.com/gregkh/kernel-tutorial" style="font-size: 15px;"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">https://github.com/gregkh/kernel-tutorial</span></a><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">에서 얻을 수 있으며, 해당 발표 동영상은 </span><a href="http://www.youtube.com/watch?v=XXix80GCvpo" style="font-size: 15px;"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">http://www.youtube.com/watch?v=XXix80GCvpo</span></a><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> 에서 확인 할 수 있습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">동영상은 안타깝게도 오디오 상의 문제로 상태가 좋지만은 못합니다. 같은 주제로 Greg이 한 몇년 전의 다른 발표 동영상들도 Youtube에 있으니, 그걸 보는 것도 좋을 것 같습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">FOSDEM 2010 에서 있었던 같은 주제의 발표 동영상을 추천합니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">2년 전 발표라 조금 다른 부분도 있지만, 전체적 내용은 같더군요.</span><br /><a href="http://www.youtube.com/watch?v=LLBrBBImJt4" style="font-size: 15px;"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">http://www.youtube.com/watch?v=LLBrBBImJt4</span></a><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">엄청나게 많은 분들이 리눅스를 사용하고 있고 또한 굉장히 많은 분들이 리눅스를 개발자로써 사용하고 있습니다. 이 과정에서 리눅스의 많은 문제점들을 마주하게 되고 수정하게 되지만, 이걸 upstream에 보내는 건 또한 쉬운 일이 아니지요.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">치명적인 문제를 찾거나 엄청난 개선을 했고, 세상의 많은 이들에게 도움을 주기 위해 이를 upstream - 리누스 토발즈가 직접 관리하는 메인 소스코드 저장소 - 에 보내고자 하지만, reject 되는 경우가 많습니다. 하지만 대부분은 리눅스의 개발 프로세스, 패치를 보내는 과정과 주의할 점 등을 몰랐기 때문인 경우라고 합니다. 사실 그걸 모르니 패치를 보내지 못하는 경우도 많구요.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이 문서는 리눅스에서 발견한 문제를 수정하고 이 수정 내용을 어떻게 패치로 만들어서 upstream의 리눅스에 적용되도록 하는지 알아봅니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이를 위해, 가장 사소하지만 중요한, 코딩 스타일이 잘못된 파일들을 수정하고 이걸 패치로 만들어서 보내는 과정을 함께 진행해 보겠습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">전체 워크플로를 크게 정리하면 이렇습니다.</span></b><br />
<ol style="font-size: 15px; margin-bottom: 0pt; margin-top: 0pt;"><b id="internal-source-marker_0.24705196963623166" style="font-family: Arial; font-weight: normal;">
<li style="list-style-type: decimal; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">소스코드 받아오기(개발환경 구축)</span></li>
<li style="list-style-type: decimal; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">문제점 발견</span></li>
<li style="list-style-type: decimal; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">문제점 수정, 확인</span></li>
<li style="list-style-type: decimal; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">패치 만들기</span></li>
<li style="list-style-type: decimal; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">패치 보내기</span></li>
</b></ol>
<b id="internal-source-marker_0.24705196963623166" style="font-family: Arial; font-weight: normal;">
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 18pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.uebjpftz36ec"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">소스 코드 받아오기</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 18pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.5pxxd17ogpb7"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">문제점 찾기</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 18pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.gouolvs8b16m"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">문제점 수정하기</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.7171bd68phk"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">토픽 브랜치(topic branch) 만들기</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 18pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.lftm86q0tnic"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">빌드해보기</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 18pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.s6ypi0bhe0sp"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">패치 만들기</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.jkrsfzkhpj6t"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">git status</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.eomt5kqf5wfb"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">git add</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.t5vr8i6kh4yf"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">git commit</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.kosc0rz2kjrg"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">git format-patch</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 18pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.pqgwel3q3rrg"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">패치 보내기</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.dok3srf94iaq"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">패치를 보낼 사람 찾기</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.7k1y8te54obd"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">git 메일 설정</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.xchobq2aq99a"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">메일 보내기</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 18pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.ndbvi9tgigyt"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">기다리기</span></a><span style="color: #1155cc; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"></span></div>
<div dir="ltr" style="font-size: 15px; margin-bottom: 0pt; margin-left: 18pt; margin-top: 0pt;">
<a href="https://docs.google.com/document/d/1jFGEeAPm8vPfCcPFKm5DtKR83nMlMaSM60ToOik7CTg/edit#heading=h.i8vwz0225v6d"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">참고자료</span></a></div>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><h1 dir="ltr" style="font-size: 15px;">
<span style="font-size: 24px; vertical-align: baseline; white-space: pre-wrap;">소스 코드 받아오기</span></h1>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">대부분의 오픈소스 개발방식을 사용하는 프로젝트가 그렇듯이, 리눅스 또한 다양한 트리와 브랜치를 이용해 개발되고 있습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">따라서, 올바른 소스 트리에서 코드를 받아오고, 올바른 소스 트리로 패치를 보내는 것이 필요한데요.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">리눅스의 경우, 다음 버전에 머지되기를 기다리는 패치를 위해 </span><span style="font-size: 15px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;">linux-next</span><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> 트리가 존재합니다. 아주 특수한 경우가 아니라면 모든 패치는 이 트리로 업로드 하는 것이 좋겠습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">먼저, 해당 트리의 코드를 가져와야겠죠. git clone을 쓰는 것도 하나의 방법이겠구요. 패치 하나만 만들어 보고 끝낼 게 아니라 이미 특정 트리의 소스코드를 clone해서 쓰고 있다면, remote로 linux-next를 추가하고 fetch 해서 쓰는 걸 권장합니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">linux-next 트리의 저장소 주소는 다음과 같습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">단순히</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git clone </span><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">으로 소스코드를 가져올 수 있구요,</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">앞서 설명했듯 이미 특정 트리를 clone해서 저장소를 만들어 두신 상태라면, 다음과 같은 명령으로 linux-next를 remote에 추가하고 소스코드를 가져와 작업 디렉토리를 구성할 수 있습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git remote add linux-next git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git<br class="kix-line-break" />$ git fetch linux-next<br class="kix-line-break" />$ git fetch --tags linux-next</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">그리고, 소스코드를 가져온 지 오래되었을 경우에는 다음과 같은 명령으로 업데이트를 해야겠죠.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git remote update</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<div dir="ltr" style="font-size: 15px;">
<br /></div>
<div dir="ltr">
<span style="font-size: large;">구글의 kernel.org 공식 미러</span></div>
<b id="internal-source-marker_0.3839427817147225" style="font-size: 15px; font-weight: normal; text-indent: 142px;"><span style="vertical-align: baseline; white-space: pre-wrap;">kernel.org 에서 소스코드를 받는 건 아무래도 조금 느린 면이 있는데요, 구글에서는 </span><a href="https://kernel.googlesource.com/"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">https://kernel.googlesource.com/</span></a><span style="vertical-align: baseline; white-space: pre-wrap;"> 에서 kernel.org 의 미러(mirror)를 제공하고 있으며, 이 서비스는 세계 각지의 구글 데이터 센터를 이용하기 때문에 상당히 빠른 속도를 보인다고 합니다. 해당 서비스에 대한 구글의 공지글은 다음 링크를 따라가면 볼 수 있습니다.</span><br /><a href="http://google-opensource.blogspot.kr/2012/04/worldwide-mirrors-of-gitkernelorg.html"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">http://google-opensource.blogspot.kr/2012/04/worldwide-mirrors-of-gitkernelorg.html</span></a><span style="vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="vertical-align: baseline; white-space: pre-wrap;">여기를 이용할 경우, 위의 명령어들에서 linux-next 트리의 git 저장소 주소를 </span><span style="font-family: 'Ubuntu Mono'; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;">https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next</span><span style="font-family: 'Ubuntu Mono'; vertical-align: baseline; white-space: pre-wrap;"> </span><br /><span style="vertical-align: baseline; white-space: pre-wrap;">로 변경해 주시면 되겠습니다.</span><br /><span style="font-size: 13px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;">구글의 미러에 대한 정보는 이호민님(</span><a href="https://plus.google.com/u/0/118040095502884745897/about"><span style="color: #1155cc; font-size: 13px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;">https://plus.google.com/u/0/118040095502884745897/about</span><span style="color: black; font-size: 13px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span></a><span style="font-size: 13px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;">께서 알려주셨습니다. 다시 한번 감사 말씀 드립니다 :)</span></b><br /><span style="font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><h1 dir="ltr" style="font-size: 15px;">
<span style="font-size: 24px; vertical-align: baseline; white-space: pre-wrap;">문제점 찾기</span></h1>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">일단 문제점이 있어야 수정을 하겠죠.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">문제점은 직접 발견할 수도, 남들이 찾고 이야기한 걸 참고할 수도 있겠는데요. 다양한 방법이 있겠습니다. 메일링 리스트를 구독할 수도 있겠고, 이슈 트래킹 시스템을 이용할 수도 있겠죠.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">아래는 커널 버그질라 페이지입니다. 최신 커널에 대한 내용으로 업데이트 되어 있지 않다고 합니다만, 잘 찾아보면 재미있는 버그를 찾을 수도 있을 겁니다.</span><br /><a href="https://bugzilla.kernel.org/query.cgi?format=advanced" style="font-size: 15px;"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">https://bugzilla.kernel.org/query.cgi?format=advanced</span></a><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">그리고, 다음 링크를 따라가시면 메인 커널 메일링 리스트를 확인할 수 있습니다.</span><br /><a href="http://vger.kernel.org/vger-lists.html#linux-kernel" style="font-size: 15px;"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">http://vger.kernel.org/vger-lists.html#linux-kernel</span></a><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">하지만, 처음 컨트리뷰션을 하려 마음 먹었을 때 하기 쉬운 실수 중 하나가, 처음부터 거대한 패치를 하려 하는 경우라고 합니다. 물론 여러분의 패치는 훌륭하고 그걸 upstream에 넣으면 세상을 위한 큰 도움이 되겠지만, 실제로 그 패치를 프로젝트에 머지해야할 메인터너(maintainer) 입장에선 그렇지많은 않다는 이야기죠. 대부분은 패치를 한두개만 올리고는 더이상 패치를 보내지 않는다고 합니다. 메인터너 입장에선 이를 감안할 때, 커다란 수정 내용의 패치를 함부로 머지하면, 해당 패치를 보냈던 사람이 더이상 해당 부분을 관리하지 않으면 그로 인한 문제도 크다는 거죠. 따라서, 메인터너와의 '신뢰'를 얻는 게 중요하다고 합니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">따라서, 여기선 심각한 문제가 아니라 일단 간단하게 따라해 볼 수 있고, 그렇지만 중요한 문제점을 찾아가 보겠습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">코딩 스타일입니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">코딩 스타일이 얼마나 사소해보이지만 심각한 문제인지에 대해선 따로 이야기 하지 않겠습니다 ;)</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">아시다시피 리눅스는 엄격한 코딩 스타일이 있지만, 여러가지 이유로 지켜지지 않는 파일들도 많다고 하며, 이런 것들을 수정해 주는 건 큰 도움이 될 수 있겠죠.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">리눅스 소스코드에는 코딩 스타일을 검사해 주는 툴, checkpatch.pl 이 scripts/ 디렉토리 아래에 있습니다. 이걸 이용해 다음과 같은 명령으로 검사할 수 있습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">./scripts/checkpatch.pl [--terse] --file <검사할 파일 경로></span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">--terse 옵션은 검사 결과를 각각 한줄씩으로 나타내라는 옵션이구요. 옵션은 이외에도 많으며, 다음의 명령으로 사용법을 볼 수 있습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">./scripts/checkpatch.pl --help</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">예를 들어 drivers/staging/csr/csr_framework_ext_types.h 를 <검사할 파일 경로>에 넣으면, 다음과 같이 코딩 스타일을 어긴 내용을 알려줍니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">drivers/staging/csr$ ../../../scripts/checkpatch.pl --terse --file csr_framework_ext_types.h </span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:5: ERROR: code indent should use tabs where possible</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:6: ERROR: code indent should use tabs where possible</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:8: ERROR: code indent should use tabs where possible</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:9: ERROR: code indent should use tabs where possible</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:28: ERROR: open brace '{' following struct go on the same line</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:29: WARNING: please, no spaces at the start of a line</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:30: WARNING: please, no spaces at the start of a line</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:34: ERROR: open brace '{' following struct go on the same line</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:36: WARNING: please, no spaces at the start of a line</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:37: WARNING: please, no spaces at the start of a line</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:40: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:41: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:42: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:47: ERROR: open brace '{' following struct go on the same line</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:48: WARNING: please, no spaces at the start of a line</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:49: WARNING: please, no spaces at the start of a line</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:50: WARNING: please, no spaces at the start of a line</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:53: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:54: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:55: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">total: 7 errors, 13 warnings, 63 lines checked</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">7개의 error와 13개의 warning을 찾았습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이 파일을 수정하고 패치를 만들어 보내 보겠습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">참고로, 이 파일은 제가 수정해서 이미 패치를 보냈으니, 만약 해당 패치가 머지된다면 이 문서를 보고 해당 파일에 같은 명령어를 실행할 경우 다른 결과가 나올 수도 있을 겁니다 ;)</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">여담이지만, Korea Linx Forum 2012의 'Write and submit your first Linux kernel patch' 세션의 경우, Greg Kroah-Hartman은 이와 같이 코딩 스타일을 수정해야 할 파일의 목록을 종이 조각에 인쇄해 와서, 사람들에게 이 종이 조각을 하나씩 나눠주더군요. 1주일 내로 수정해서 패치를 작성해 보내 보라고 말입니다 ;)</span><br /><h1 dir="ltr" style="font-size: 15px;">
<span style="font-size: 24px; vertical-align: baseline; white-space: pre-wrap;">문제점 수정하기</span></h1>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">문제점 수정은 각자 편한 방법으로 진행하면 되겠습니다. 여기선 코딩 스타일을 수정하면 되니, 저는 제게 익숙한 vim 편집기로 수정을 진행하겠구요.</span><br /><h2 dir="ltr" style="font-size: 15px;">
<span style="font-size: 19px; vertical-align: baseline; white-space: pre-wrap;">토픽 브랜치(topic branch) 만들기</span></h2>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">수정을 하기 전에 topic branch를 만드는 게 좋습니다. git 에서는 브랜칭의 비용이 굉장히 적기 때문에, 이렇게 작업하는 걸 선호하고, 리눅스 메인터너들도 이걸 선호할테니, 이 방법을 씁시다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이제부터 git 사용이 나올텐데, git에 대한 자세한 내용을 알고 싶다면 다른 문서나 책을 보시는 게 좋겠습니다. Pro Git 라는 책(</span><a href="http://git-scm.com/book" style="font-size: 15px;"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">http://git-scm.com/book</span></a><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">)을 개인적으로 추천합니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">토픽 브랜치에 대해 더 알고 싶다면, </span><a href="http://www.kernel.org/pub/software/scm/git/docs/howto/separating-topic-branches.txt" style="font-size: 15px;"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">http://www.kernel.org/pub/software/scm/git/docs/howto/separating-topic-branches.txt</span></a><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> 등의 문서를 참고하세요.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">다음의 명령으로 현재 브랜치들의 목록과 자신이 위치한 브랜치를 알 수 있습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git branch</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">* master</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">그리고, 다음의 명령으로 패치를 만들 브랜치를 만들고, 바로 그리로 이동합니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git checkout -b fix_csr_codingstyle</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">M<span class="Apple-tab-span" style="white-space: pre;"> </span>drivers/staging/csr/csr_framework_ext_types.h</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Switched to a new branch 'fix_csr_codingstyle'</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">다시 브랜치 목록과 자신이 위치한 브랜치를 확인해 보면...</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git branch</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">* fix_csr_codingstyle</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> master</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">정상적으로 브랜치가 생성되고 해당 브랜치로 이동했습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">수정을 마치고 나서 checkpatch를 돌려보면...</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">drivers/staging/csr$ ../../../scripts/checkpatch.pl --terse --file csr_framework_ext_types.h </span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:38: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:39: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:40: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:50: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:51: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">csr_framework_ext_types.h:52: WARNING: do not add new typedefs</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">total: 0 errors, 6 warnings, 60 lines checked</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">대략 위와 같은 결과가 나왔군요. warning이 좀 남았지만, 일단 간단한 수정만으로 만족하겠습니다.</span><br /><h1 dir="ltr" style="font-size: 15px;">
<span style="font-size: 24px; vertical-align: baseline; white-space: pre-wrap;">빌드해보기</span></h1>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이제 본격적으로 패치를 만들어보기 시작해야 할텐데요, 먼저 수정 내용은 제대로 되었다는 걸 확실히 해야겠죠.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">빌드는 제대로 되는지, 증상은 제대로 수정되었는지 확인해 봅시다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">빌드는 다음의 명령처럼 해당 모듈만 빌드해 볼 수도 있겠지만, 전체 커널을 다시 빌딩해보고 실행해서 문제가 제대로 수정되었음을 확실히 해야겠죠.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">make M=drivers/staging/csr</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><h1 dir="ltr" style="font-size: 15px;">
<span style="font-size: 24px; vertical-align: baseline; white-space: pre-wrap;">패치 만들기</span></h1>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이제, 패치를 만들어 보겠는데, 리눅스는 git로 관리되는 만큼, 너무나도 간단하고 쉽습니다.</span><br /><h2 dir="ltr" style="font-size: 15px;">
<span style="font-size: 19px; vertical-align: baseline; white-space: pre-wrap;">git status</span></h2>
<span style="font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">git status</span><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> 명령은 현재 수정한 내용을 보여줍니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git status</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"># On branch master</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"># Changes not staged for commit:</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"># (use "git add <file>..." to update what will be committed)</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"># (use "git checkout -- <file>..." to discard changes in working directory)</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">#</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">#<span class="Apple-tab-span" style="white-space: pre;"> </span>modified: drivers/staging/csr/csr_framework_ext_types.h</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">#</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">no changes added to commit (use "git add" and/or "git commit -a")</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><h2 dir="ltr" style="font-size: 15px;">
<span style="font-size: 19px; vertical-align: baseline; white-space: pre-wrap;">git add</span></h2>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">다음 명령을 통해 수정한 파일을 commit할 것임을 알립니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git add drivers/staging/csr/csr_framework_ext_types.h</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><h2 dir="ltr" style="font-size: 15px;">
<span style="font-size: 19px; vertical-align: baseline; white-space: pre-wrap;">git commit</span></h2>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이제, commit합니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git commit</span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">commit 메세지 작성할 에디터가 뜨겠죠.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">commit 메세지 또한 중요한데요. 먼저 수정한 모듈과 수정한 내용을 짧게 제목으로 정리하고, 한줄을 그냥 띄운 후, 그 아래(세번째 줄)에 자세한 설명을 적어 줍니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">git log 명령을 통해 남들은 어떻게 쓰는지 알 수 있겠구요.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">아래는 제가 쓴 commit 메세지입니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> staging: csr: fix coding style</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> </span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> Fix coding style of csr_framework_ext_types.h</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> </span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> Signed-off-by: SeongJae Park <sj38.park@gmail.com></span><span style="background-color: transparent; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">마지막 줄에 Signed-off-by 라는 부분이 눈에 띌 텐데요, Signed-off-by는 개발자들이 해당 commit에 다는 증명서로, 다음과 같은 의미를 띕니다.</span><br /><ol style="font-size: 15px; margin-bottom: 0pt; margin-top: 0pt;">
<li style="list-style-type: decimal; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">내가 이 수정 사항을 만들었다; 또는</span></li>
<li style="list-style-type: decimal; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">기존 작업 내용과 잘 호환되는 라이센스 하에 이 수정 사항을 만들었다;</span></li>
<li style="list-style-type: decimal; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">또는 앞의 두가지와 이 세번째 항목에 의해 내가 이 수정 사항을 받았으며, 내가 이에 대해 어떤 수정을 가하진 않았다.</span></li>
<li style="list-style-type: decimal; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">이 commit은 public 하다.</span></li>
</ol>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이걸 쓰기 위해 별도의 툴을 쓰거나 할 필요는 없고, 그냥 키보드로 저렇게 타이핑 해 주시면 됩니다.</span><br /><h2 dir="ltr" style="font-size: 15px;">
<span style="font-size: 19px; vertical-align: baseline; white-space: pre-wrap;">git format-patch</span></h2>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">분산 버전 관리 시스템을 사용하지 않은 사람은 조금 헷갈릴 수도 있겠습니다. git과 같은 분산 버전 관리 시스템은 각 개발자가 사용하는 컴퓨터 파일 시스템 위에 독립된 저장소를 만드는 것이기 때문에, 앞서 행한 commit은 자신의 파일 시스템 위의 독립된 저장소에 commit한 것이지, 네트웍 상에 존재하는 메인 저장소로 commit 한 것이 아닙니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이제, 리눅스 메인터너들이 많이 쓰는 형식의 패치를 만들어 봅시다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">간단히, 다음의 git format-patch 명령으로 패치를 만들 수 있습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git format-patch master..HEAD</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">0001-staging-csr-fix-coding-style.patch</span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">소스코드를 땡겨온 후 아무 변경도 가하지 않은 master 브랜치와, 현재 HEAD가 가리키고 있는(우리가 위치해 있는), topic 브랜치 사이의 commit들을 이용해 패치 파일을 만들고, 생성한 패치 파일의 파일명을 보여 줍니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">드디어 패치를 만들었습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이제, 이 파일만 메인터너에게 보내면 됩니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><h1 dir="ltr" style="font-size: 15px;">
<span style="font-size: 24px; vertical-align: baseline; white-space: pre-wrap;">패치 보내기</span></h1>
<h2 dir="ltr" style="font-size: 15px;">
<span style="font-size: 19px; vertical-align: baseline; white-space: pre-wrap;">패치를 보낼 사람 찾기</span></h2>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">먼저, 패치를 누구에게 보낼지 알아야겠죠. 기왕이면 착하고 똑똑한 메인터너에게 보내야겠지만, 수정한 부분을 관리하는 메인터너에게 보내야 할 것입니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">수정한 파일의 메인터너를 찾는 툴도 리눅스 소스코드에 있습니다. 다음의 명령을 이용합니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ ./scripts/get_maintainer.pl 0001-staging-csr-fix-coding-style.patch </span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Greg Kroah-Hartman <gregkh@linuxfoundation.org> (supporter:STAGING SUBSYSTEM,commit_signer:3/4=75%)</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">devel@driverdev.osuosl.org (open list:STAGING SUBSYSTEM)</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">linux-kernel@vger.kernel.org (open list)</span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">devel@driverdev.osuosl.org가 적당하겠군요.</span><br /><h2 dir="ltr" style="font-size: 15px;">
<span style="font-size: 19px; vertical-align: baseline; white-space: pre-wrap;">git 메일 설정</span></h2>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">git는 패치 파일을 메일로 쓰는 것도 도와줍니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">하지만, 이를 위해선 다음 명령어로 git-email을 설치해야 합니다. 이미 설치하셨다면, 설치할 필요 없겠죠.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ sudo apt-get install git-email</span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">그리고, 메일 설정을 해주는데요. git가 메일을 보낼 수 있도록, smtp 서버 등을 설정 해야 합니다. gmail을 이용한다면 다음과 같이 설정하면 됩니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git config --global sendemail.smtpserver smtp.gmail.com</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git config --global sendemail.smtpserverport 587</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git config --global sendemail.smtpencryption tls</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git config --global sendemail.smtpuser <본인의 이메일 주소></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이렇게 설정하면 git을 이용해 메일을 보낼 때 git이 gmail 패스워드를 입력하라고 프롬프트를 띄워주는데요.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">만약 그것도 귀찮다면 다음과 같이 패스워드도 설정할 수 있습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git config --global sendemail.smtppass your_password</span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">하지만, 보안을 위해선 패스워드는 저장하지 않는 게 좋지 않겠나 싶습니다.</span><br /><h2 dir="ltr" style="font-size: 15px;">
<span style="font-size: 19px; vertical-align: baseline; white-space: pre-wrap;">메일 보내기</span></h2>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이제, 다음의 명령을 이용해 메일을 보냅니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git send-email --to <보낼 곳 메일 주소></span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">몇가지 질문이 나오는데 잘 읽고 답하도록 하며, y/n 등의 선택지가 나오지 않는 건 그냥 엔터로 기본값을 사용하도록 설정합니다. 대부분 엔터/y로 귀결될 겁니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">앞서 작성한 메일의 경우, 다음과 같은 명령으로 보낼 수 있겠습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr" style="font-size: 15px;">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">$ git send-email --to </span><a href="mailto:devel@driverdev.osuosl.org"><span style="background-color: transparent; color: #1155cc; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">devel@driverdev.osuosl.org</span></a><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> *.patch</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">0001-staging-csr-fix-coding-style.patch</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Who should the emails appear to be from? [SeongJae Park <sj38.park@gmail.com>] </span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Emails will be sent from: SeongJae Park <sj38.park@gmail.com></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Message-ID to be used as In-Reply-To for the first email? </span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">(mbox) Adding cc: SeongJae Park <sj38.park@gmail.com> from line 'From: SeongJae Park <sj38.park@gmail.com>'</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">(body) Adding cc: SeongJae Park <sj38.park@gmail.com> from line 'Signed-off-by: SeongJae Park <sj38.park@gmail.com>'</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">From: SeongJae Park <sj38.park@gmail.com></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">To: devel@driverdev.osuosl.org</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Cc: SeongJae Park <sj38.park@gmail.com></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Subject: [PATCH] staging: csr: fix coding style</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Date: Tue, 16 Oct 2012 16:15:42 +0900</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Message-Id: <1350371742-831-1-git-send-email-sj38.park@gmail.com></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">X-Mailer: git-send-email 1.7.9.5</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">MIME-Version: 1.0</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Content-Type: text/plain; charset=UTF-8</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Content-Transfer-Encoding: 8bit</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> The Cc list above has been expanded by additional</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> addresses found in the patch commit message. By default</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> send-email prompts before sending whenever this occurs.</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> This behavior is controlled by the sendemail.confirm</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> configuration setting.</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> For additional information, run 'git send-email --help'.</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> To retain the current behavior, but squelch this message,</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> run 'git config --global sendemail.confirm auto'.</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Send this email? ([y]es|[n]o|[q]uit|[a]ll): y</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Password: </span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">OK. Log says:</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Server: smtp.gmail.com</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">MAIL FROM:<sj38.park@gmail.com></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">RCPT TO:<devel@driverdev.osuosl.org></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">RCPT TO:<sj38.park@gmail.com></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">From: SeongJae Park <sj38.park@gmail.com></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">To: devel@driverdev.osuosl.org</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Cc: SeongJae Park <sj38.park@gmail.com></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Subject: [PATCH] staging: csr: fix coding style</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Date: Tue, 16 Oct 2012 16:15:42 +0900</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Message-Id: <1350371742-831-1-git-send-email-sj38.park@gmail.com></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">X-Mailer: git-send-email 1.7.9.5</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">MIME-Version: 1.0</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Content-Type: text/plain; charset=UTF-8</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Content-Transfer-Encoding: 8bit</span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Result: 250 2.0.0 OK 1350371762 y5sm10389071pav.36</span></td></tr>
</tbody></table>
</div>
<br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><h1 dir="ltr" style="font-size: 15px;">
<span style="font-size: 24px; vertical-align: baseline; white-space: pre-wrap;">기다리기</span></h1>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">이제, 지루한 기다림의 시간입니다. 패치는 세계 각지에서 엄청난 양이 쏟아지므로, 메인터너들이 메일을 바로 보지는 못할 겁니다. 이 문서를 작성하며 보낸 패치에 대해서도 아직 어떤 답장이나 연락도 없습니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">운이 좋으면 빠르게, 없다면 좀 천천히 연락이 올겁니다.</span><br /><span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">중요한 패치인데 답이 너무 느리다면 정중히 해당 메인터너에게 메일을 보내 보는 것도 좋은 방법입니다.</span></b><div>
<b style="font-family: Arial; font-size: 15px; font-weight: normal; text-indent: 358px;"><h1 dir="ltr" style="display: inline !important;">
<span style="font-size: 24px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></h1>
</b></div>
<div>
<b id="internal-source-marker_0.720873209182173" style="font-family: Arial; font-size: 15px; font-weight: normal; text-indent: 358px;"><h1 dir="ltr" style="display: inline !important;">
<span style="font-size: 24px; vertical-align: baseline; white-space: pre-wrap;">피드백 받고 보내기</span></h1>
</b><div>
<b id="internal-source-marker_0.720873209182173" style="font-family: Arial; font-size: 15px; font-weight: normal; text-indent: 358px;"><span style="vertical-align: baseline; white-space: pre-wrap;">메일을 보내면 생각보다 빨리 피드백을 받습니다. 오자가 섞인 패치를 실수로 보낸 적 있는데, 이틀만에 이를 지적당했고, 약 일주일만에 머지됐습니다!</span><br /><span style="vertical-align: baseline; white-space: pre-wrap;">문제가 있어 보이면 그에 대해 발견한 사람들이 바로바로 피드백을 줍니다.</span><br /><span style="vertical-align: baseline; white-space: pre-wrap;">이에 대해서는 적당히 정말 잘못됐다면 시인하고 새로운 패치를 만들어 보내고, 그쪽 문제제기가 잘못되었다면 오해가 있는 것 같다고 정중하게 잘 말합시다. 적당히 강경하고 적당히 인정하는 자세가 필요하겠죠. 분명한 건, 다들 훌륭한 커널을 만들려 노력하고 있다는 것 같습니다.</span></b></div>
<div>
<b style="font-family: Arial; font-size: 15px; font-weight: normal; text-indent: 358px;"><h2 dir="ltr" style="display: inline !important;">
<span style="font-size: 19px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></h2>
</b></div>
<div>
<b style="font-family: Arial; font-size: 15px; font-weight: normal; text-indent: 358px;"><h2 dir="ltr" style="display: inline !important;">
<span style="font-size: 19px; vertical-align: baseline; white-space: pre-wrap;">순수 문자로만 메일 보내기</span></h2>
</b></div>
<div>
<b style="font-family: Arial; font-size: 15px; font-weight: normal; text-indent: 358px;"><span style="vertical-align: baseline; white-space: pre-wrap;">한가지 유의할 점은, 리눅스 메일링 리스트로 gmail에서 답장을 그냥 보내면, 아래와 같은 전송 실패 메세지가 도착합니다.</span><br /><span style="vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Delivery to the following recipient failed permanently:</span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> linux-kernel@vger.kernel.org</span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Technical details of permanent failure:</span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Google tried to deliver your message, but it was rejected by the recipient domain. We recommend contacting the other email provider for further information about the cause of this error. The error that the other server returned was: 550 550 5.7.1 Content-Policy reject msg: </span><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;">The message contains HTML subpart, therefore we consider it SPAM or Outlook Virus.</span><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> TEXT/PLAIN is accepted.! BF:<U 0.494653>; S1753440Ab2JPHiz (state 17).</span></td></tr>
</tbody></table>
</div>
<br /><span style="vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="vertical-align: baseline; white-space: pre-wrap;">본문에 html이 섞여 있다는 건데요. 이건 gmail의 메일 작성창에 Rich formatting이 기본으로 켜져 있어서입니다. 패치 보낼 땐 git send-email이 알아서 잘 해줬지만, gmail 기본 입력창은 Rich formatting이 켜져 있어서 내부적으로 html을 섞습니다.</span><br /><span style="vertical-align: baseline; white-space: pre-wrap;">gmail 입력창 바로 위의 Plain text 를 클릭해 plain text(html 등이 섞이지 않은 순수한 문자)로 메일 본문이 작성되도록 합시다.</span><br /><span style="vertical-align: baseline; white-space: pre-wrap;">쥐메일이 아니라도 비슷한 상황이 있을 수 있을 겁니다.</span></b></div>
<div>
<b style="font-family: Arial; font-size: 15px; font-weight: normal; text-indent: 358px;"><span style="vertical-align: baseline; white-space: pre-wrap;"><b style="font-weight: normal;"><h1 dir="ltr" style="display: inline !important;">
<span style="font-size: 24px; vertical-align: baseline;"><br /></span></h1>
</b></span></b></div>
<div>
<b style="font-family: Arial; font-size: 15px; font-weight: normal; text-indent: 358px;"><span style="vertical-align: baseline; white-space: pre-wrap;"><b id="internal-source-marker_0.720873209182173" style="font-weight: normal;"><h1 dir="ltr" style="display: inline !important;">
<span style="font-size: 24px; vertical-align: baseline;">머지 완료 메세지</span></h1>
</b></span><span style="vertical-align: baseline; white-space: pre-wrap;">위의 과정을 잘 거치고 인내와 토론을 잘 했다면, 머지 되었음을 다음과 같은 이메일로 통보 받습니다.</span><br /><span style="vertical-align: baseline; white-space: pre-wrap;"></span><div dir="ltr">
<table style="border-collapse: collapse; border: none; width: 624px;"><colgroup><col width="*"></col></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #d9d9d9; border: 0px solid rgb(255, 255, 255); padding: 7px; vertical-align: top;"><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">This is a note to let you know that I've just added the patch titled</span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> staging: csr: csr_framework_ext_types.h: fix coding style</span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">to my staging git tree which can be found at</span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"> git://</span><a href="http://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git"><span style="background-color: transparent; color: #1155cc; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git</span></a><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">in the staging-next branch.</span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">The patch will show up in the next release of the linux-next tree</span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">(usually sometime within the next 24 hours during the week.)</span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">The patch will also be merged in the next major kernel release</span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">during the merge window.</span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: transparent; font-family: 'Ubuntu Mono'; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">If you have any questions about this process, please let me know.</span></td></tr>
</tbody></table>
</div>
<br /><span style="vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="vertical-align: baseline; white-space: pre-wrap;">X나 좋군요!?</span></b><b style="font-family: Arial; font-weight: normal;"><span style="font-size: 15px; white-space: pre-wrap;"><br /></span><h1 dir="ltr" style="font-size: 15px;">
<span style="font-size: 24px; vertical-align: baseline; white-space: pre-wrap;">참고자료</span></h1>
<br /><ul style="font-size: 15px; margin-bottom: 0pt; margin-top: 0pt;">
<li style="list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Greg Kroah-Hartman의 Korea Linux Forum 2012 발표자료(</span><a href="https://github.com/gregkh/kernel-tutorial"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">https://github.com/gregkh/kernel-tutorial</span></a><span style="vertical-align: baseline; white-space: pre-wrap;">)</span></li>
<li style="list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Greg Kroah-Hartman의 Korea Linux Forum 2012 발표 동영상(</span><a href="http://www.youtube.com/watch?v=XXix80GCvpo"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">http://www.youtube.com/watch?v=XXix80GCvpo</span></a><span style="vertical-align: baseline; white-space: pre-wrap;">) - 음향에 문제가 좀 있습니다.</span></li>
<li style="list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Greg Kroah-Hartman의 FOSDEM 2010 비슷한 주제 발표 동영상(</span><a href="http://www.youtube.com/watch?v=LLBrBBImJt4"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">http://www.youtube.com/watch?v=LLBrBBImJt4</span></a><span style="vertical-align: baseline; white-space: pre-wrap;">)</span></li>
<li style="list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">kernel.org 버그질라(</span><a href="https://bugzilla.kernel.org/query.cgi?format=advanced"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">https://bugzilla.kernel.org/query.cgi?format=advanced</span></a><span style="vertical-align: baseline; white-space: pre-wrap;">)</span></li>
<li style="list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">커널 메일링 리스트(</span><a href="http://vger.kernel.org/vger-lists.html#linux-kernel"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">http://vger.kernel.org/vger-lists.html#linux-kernel</span></a><span style="vertical-align: baseline; white-space: pre-wrap;">)</span></li>
<li style="list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Pro Git(</span><a href="http://git-scm.com/book"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">http://git-scm.com/book</span></a><span style="vertical-align: baseline; white-space: pre-wrap;">)</span></li>
<li style="list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Topic branch에 대한 문서 중 하나(</span><a href="http://www.kernel.org/pub/software/scm/git/docs/howto/separating-topic-branches.txt"><span style="color: #1155cc; vertical-align: baseline; white-space: pre-wrap;">http://www.kernel.org/pub/software/scm/git/docs/howto/separating-topic-branches.txt</span></a><span style="vertical-align: baseline; white-space: pre-wrap;">)</span></li>
<li style="list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Documentation/HOWTO</span></li>
<li style="list-style-type: disc; vertical-align: baseline;"><span style="vertical-align: baseline; white-space: pre-wrap;">Documentation/development_process</span></li>
</ul>
<span style="font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></b></div>
</div>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-19715537611254519752012-10-13T01:31:00.000+09:002012-10-13T02:00:01.814+09:00리눅스의 주역들을 만나다 - Korea Linux Forum 2012 후기 -<div>이번 10월 11일과 12일, Korea Linux Forum 2012 가 열렸습니다.<br />
<a href="http://events.linuxfoundation.org/events/korea-linux-forum">http://events.linuxfoundation.org/events/korea-linux-forum</a><br />
<br />
Samsung과 Intel이 주된 스폰서로 참여했고, Linux Foundation 주최로 열린 행사였는데요.<br />
Linux Developer 들이 대거 참여하셨고, Linux 의 아버지, <b>Linus Torvalds 형님께서 참가</b>하신다는 점에서 여러모로 사람들을 들뜨게 만들었죠.<br />
<br />
당연하게도 매우 애타게 여기 참가하기 위해 이래저래 노력했고, 이런저런 우여곡절 끝에 저도 참가할 수 있게 되었습니다.<br />
이런 행사 참가할 때마다 정말 많은 배움을 얻고 가슴벅찬 경험을 하게 되는데, 이번 포럼 역시 마찬가지였기에, 후기를 적어볼까 합니다.<br />
<b><br /></b>
<b># 상당히 주관적인 기준으로 작성한 글이라, 공감하기 어려울 수 있습니다.</b><br />
<b># 물론, 제가 잘못 알아들은 내용이나 잘못 설명한 부분이 많을 테니, 이런 부분 알려주시면 감사하겠습니다 :)</b><br />
<br />
<span style="font-size: x-large;">Day 1. 11th October - Keynotes & Talks</span><br />
<span id="goog_534384010"></span>포럼의 첫째날은 8시 반부터 등록이 시작되었고, 9시 반 키노트로 포문을 열었습니다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0ZNAmSKSnJGOEAVpLVBkVmj1eMiTi24dR1lYyUyhWG2TwKAbp4oZKPrFYftenYiKHw-5_VRbGEC3_SCYRDBvsV_a-osmSw_2cMdbMSbDr0VFLw6ydL9OhSrleVzrm0qXpA1rmpOIq_wGS/s1600/IMG_20121011_084705.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0ZNAmSKSnJGOEAVpLVBkVmj1eMiTi24dR1lYyUyhWG2TwKAbp4oZKPrFYftenYiKHw-5_VRbGEC3_SCYRDBvsV_a-osmSw_2cMdbMSbDr0VFLw6ydL9OhSrleVzrm0qXpA1rmpOIq_wGS/s320/IMG_20121011_084705.jpg" width="320" /></a></div>
<br />
<br />
재밌는 건, 통역사가 지원되어서 동시 통역이 지원되었고, 통역해 주시는 내용을 자리에서 들을 수 있도록 라디오를 제공하더군요.<br />
상당히 높은 퀄리티의 통역이었습니다. 약간의 시간차가 있긴 했지만 거의 동시간에 통역이 되어서 들으면서도 조금 놀랐네요.<br />
<br />
<br />
<span style="font-size: large;">키노트, 그리고 Linux Foundation 의 발표 스킬</span><br />
Linux Foundation 의 Jim Zemlin 이 진행했는데, 리눅스의 현재 상황과 리눅스 개발의 의의 등에 대해 이야기 해주셨습니다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkYlQJHHvtKbtMlP__F06pwkb-AehAwkctfRQyhniOeGpM1s1zhElq3AWDWBuSDQnbsVqsOHohMfG1gCEuIkpUIr4u9wmMGqUW6Urp6l0BCYUo9VyIR0rKK-ltFVXS6AyDPwxHNJnydR9w/s1600/IMG_20121011_101714.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkYlQJHHvtKbtMlP__F06pwkb-AehAwkctfRQyhniOeGpM1s1zhElq3AWDWBuSDQnbsVqsOHohMfG1gCEuIkpUIr4u9wmMGqUW6Urp6l0BCYUo9VyIR0rKK-ltFVXS6AyDPwxHNJnydR9w/s320/IMG_20121011_101714.jpg" width="320" /></a></div>
<br />
감명깊었던 내용 중 하나는 Upstream 개발에 대한 이야기였습니다.<br />
대부분의 회사가 Open Source Software를 가져가 쓰기만 하거나 자기들 쓸 용도로만 수정하고 공개하지 않거나, 공개하더라도 사용자가 접근할 수 있도록 공개하기만 하고 Upstream(main 개발을 하는 소스코드 저장소의 개발 stream)에는 그 변경내용/개선사항을 공유하거나 merge 시키지 않는 경우가 많은데, 그렇게 함으로써 생기는 비용이 엄청나고, Upstream에 각자의 변경내용을 merge 함으로써 얻을 수 있는 이득이 엄청나다는 이야기입니다.<br />
굉장히 동의합니다. 그러지 않는 환경에서 작업하며 커다란 좌절감을 느꼈던 기억도 있구요.<br />
<br />
영어로 진행되는 행사에 갈때마다 느끼는 거지만, native speaker인 발표자들의 말이 비 영어권 국가 진행자의 영어보다 잘 들리는 경우가 많습니다.<br />
다양한 억양, 다양한 국가 외국인의 영어에 익숙하기에 더욱 그들이 듣기 편하게 구사하는 능력도 뛰어날 수 있는걸지도 모르겠습니다.<br />
이 키노트 또한 그러해서, 내 영어 듣기 능력이 생각보다 우월한걸? 하고 근거없는 자신감에 벅차올랐다가 나중에 현실을 마주하고 좌절하기도 했습니다.<br />
<br />
또 한가지 신기했던 건, 그 발표 능력이었는데요. 사실, 리눅스는 아무래도 Hacker들만의 성지에 가깝다는 느낌이 있어서 사회성 없는 Hacker 들만 있을 거라는 편견이 조금 있었는데, 스티브 잡스 부럽지 않은(Linux Foundation 멤버를 스티브 잡스와 비교하는 건 당사자에겐 좀 실례가 되지 않을까 싶긴 합니다만...^^;;) 뛰어난 발표 능력과 발표 중간중간의 유머와 조크가 상당히 돋보였습니다.<br />
<br />
개인적으로는 이 Jim Zemlin 과 Jon Corbet, Greg Kroah-Hartman, 그리고 Linus Torvalds 형님(호형호제 하는 관계 아니지만, 제 나름의 존경의 일방적 표현입니다^^;)의 발표능력이 상당히 인상깊었습니다.<br />
사실 Linus 형님께선 발표는 안하셨고 Talk 시간만 가지셨기에 발표능력이라 하긴 좀 뭐하긴 합니다만... 그 특유의 포스와 FOSS가... ㅎㅎ<br />
<br />
<br />
<span style="font-size: large;">리눅스 개발 참여의 현상황, 리눅스에 기여함으로써 얻는 것들</span><br />
이후 여러가지 발표와 대담들이 있었습니다.<br />
Jon Corbet 님께선 리눅스의 현재 개발 상황과 앞으로의 전망(특히 3.7) 등에 대해 여러가지 자료 등을 보여주면서 이야기 해 주셨습니다. Volunteer 의 기여가 점점 줄어들고 있다는 이야기도 있었는데, 이어진 커널 개발자들의 패널 대담에서 이에 대해 한편으로는 위기라고 생각할 수 있겠지만, 사실은 Volunteer가 두각을 보이는 즉시 회사에 채용되기 때문이라고 해석하는 게 맞을 것이라는 이야기도 흥미로웠습니다.<br />
<br />
대담에서는 여러가지 이야기가 있었고, 몇가지 주제들은 이 대담에서만이 아니라 이후 이어진 발표들과 다음날 이어진 세션에서도 계속해서 이야기 되었는데요. 그 중 하나는 왜 그리도 커널 개발자들(이 경우 maintainer 라 칭하는 게 더 걸맞을 것 같지만)은 뉴비들의 컨트리뷰션에 까칠하냐는 이야기였던 것 같습니다.<br />
<br />
나름 큰 맘 먹고 패치를 만들어서 컨트리뷰션 하려 하지만, 이를 리뷰하고 받아주는 커널 개발자들은 보기에 따라선 좀 까칠한 어조/태도로 해당 패치를 reject 하는 경우가 많다는 것이죠.<br />
<br />
저도 리눅스에 패치를 보낸 적은 없지만 Android Open Source Project 에 몇개의 패치를 보낸 적이 있는데, 초반에 나름 까칠하다는 느낌을 받았기에 재밌게 들었는데요.<br />
<br />
이에 대해 개발자들의 의견의 대부분은, 넘어서야 하는 진입장벽이라는 분위기였던 것 같습니다. 여러모로 동의하는 바입니다. 패치를 처음 contribution 하는 입장에선 왜 내 패치를 받아주지 않는지 굉장히 애석하지만, 사실 머리를 식히고 생각해 보면 그들 말이 맞는 경우가 많거든요.<br />
그렇다고 상처 받을 것도 아니고, Feedback을 잘 해석해보고 이해하고, 논쟁하는 자세가 필요하다는 이야기가 있었고, 이에 대해 99.99% 동의합니다.<br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
패널들과의 대화 이후에는 구글의 허태준님의 키노트도 있었습니다.</div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqa0bfnm4DYTeJCzFRG4UQNrBJjFNL7Q8H6uqsWsyaLLnKLo4u6ENkmgehwso6mzSy24aip1L-SnmJQUD4hiw9z2pmGcBgNotGLG_PJpvS4Yn7NZuZK510I7BV_xAPLv6rQ2QlDnU35-3S/s1600/IMG_20121011_144330.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqa0bfnm4DYTeJCzFRG4UQNrBJjFNL7Q8H6uqsWsyaLLnKLo4u6ENkmgehwso6mzSy24aip1L-SnmJQUD4hiw9z2pmGcBgNotGLG_PJpvS4Yn7NZuZK510I7BV_xAPLv6rQ2QlDnU35-3S/s320/IMG_20121011_144330.jpg" width="320" /></a></div>
<div style="text-align: center;">
Some lines have 81 Characters. 제대로 뿜었습니다.ㅋㅋ</div>
<div style="text-align: center;">
웃음 포인트가 어딘지 궁금하면 500원.</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
통역이 제공되는 만큼 영어로의 통역도 제공되기에 허태준님은 한글로 키노트를 해주셨는데요. 리눅스 개발을 함으로써 개인이 얻을 수 있는 즐거움과 실질적인 이익, 그리고 기회에 대해 이야기를 해주셨습니다.</div>
<div style="text-align: left;">
즐거움이야 개발에서 즐거움을 느끼는 분들은 너무나도 당연히 아실테고, 메인스트림에서 활동함으로써 그 메인 스트림 개발자 사이에서 social network이 생성되고, 대부분의 메인스트림 개발자들은 뛰어난 능력을 가지고 훌륭한 회사에 소속되어 있는 경우가 많기 때문에, 채용의 기회도, social network에서 얻을 수 있는 지식/기회도 많다는 이야기였습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
저는 아직 OSS 쪽에 기여한 바가 별로 없는 뉴비지만, OSS에 기여하려 노력하고, 아주 작은 부분이나마 기여했는데, 그러면서 상당히 많은 즐거움과 기회, 이익을 얻었고, 그런 노력은 구글 코리아에서 마련해 줬던 어느 모임에서 허태준님께 이야기를 들으면서 느꼈기에 여러모로 많은 분께 감사하고 있습니다.</div>
<div style="text-align: left;">
물론 이 감사함은 patch로 갚아야겠죠 :)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="font-size: large;">발표자료를 github로 공개한 키큰남자, Greg Kroah-Hartman</span></div>
<div style="text-align: left;">
태준님의 키노트 후에는 Greg Kroah-Hartman의 발표가 있었습니다.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHVwesnRazS6CweOx9tYvslWlcJ-47Q68Wu5B8ACRd91EtXe85ZNPnQ8g6U15AXZRz3eKeek57seP_0FTOWc8KOxAr0cApiHaZxv9l1cA4nsZrU19VLiDib5rNtsN-ypdonTQD1L3Juj4M/s1600/IMG_20121011_155818.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHVwesnRazS6CweOx9tYvslWlcJ-47Q68Wu5B8ACRd91EtXe85ZNPnQ8g6U15AXZRz3eKeek57seP_0FTOWc8KOxAr0cApiHaZxv9l1cA4nsZrU19VLiDib5rNtsN-ypdonTQD1L3Juj4M/s320/IMG_20121011_155818.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Working upstream saves time and money</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
리눅스 개발 프로세스에 대한 이야기였는데요. 앞서서 Linux Foundation의 발표력이 장난 아니라고 말씀드렸지만, 개인적으로 이분의 발표력에 여러모로 매료되었습니다.</div>
<div style="text-align: left;">
하이라이트는 둘째날의 발표였습니다만, 이 발표에서부터 느꼈던 게, 깔끔하고 알아듣기 쉬운 발표 내용, 분명한 발음 등의 발표 스킬도 스킬이지만, 개발자를 끌리게 하는 그 무언가, 하드코어 개발자로써의 아우라와 포스, 그리고 <b>geeky한 센스</b>가 넘쳐나더군요.</div>
<div style="text-align: left;">
발표 시작에서부터 github를 통해 발표자료를 공유해 주는 것부터 시작해서 말이죠.</div>
<div style="text-align: left;">
발표 내내 지루할 새가 없었습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="font-size: x-large;"><b>Linus Time</b></span></div>
<div style="text-align: left;">
어쨌든 이날 행사의 방점은 역시 토발즈 형님이었죠. 제 캘린더 일정의 이름은 Korea Linux Forum이 아니라 '리누스 토발즈 방한' 이었습니다.ㅋㅋ</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
마지막 시간으로 Intel 의 Dirk Hohndel과 Linus Torvalds 형님의 대담&QnA 세션이 있었습니다.</div>
<div style="text-align: left;">
토발즈 형님은 QnA 세션을 즐기기로 유명하죠. 한국 개발자들 Shy 하다고들 하는데, 질문은 정말 많이 잘합니다. 저도 뭐 하나 질문하려고 손을 다섯번 들었는데 결국 시간이 다 되어서 질문하지 못했습니다 OTL</div>
<div style="text-align: left;">
여러가지 질문과 재밌는 답변이 있었는데, nvidia에 가운데손가락을 친히 사용해주셨던 토발즈 형님의 얼마전 발언에 대한 질문이 좀 기억에 남습니다.</div>
<div style="text-align: left;">
Greg의 geeky한 센스에 대해 앞서 이야기했지만, Geek's King 이라 불리는 토발즈 형님의 그 센스와 아우라 또한 <b>형광등 백개</b> 켠듯 하더군요.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
</div>
이날 점심시간에는 토발즈 형님이 잠시 모습을 드러냈는데, 사람들이 토발즈 형님과 사진을 찍으려 긴 줄을 서기도 했습니다.<br />
다른 커널 개발자들과 대화하는 중이었기에 좀 당황스럽거나 귀찮았을 수 있는데도 웃으며 사진에 응해주는 토발즈 형님의 대인배 스러운 웃음이 멋지더군요.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc4blYe2PzKa-KsYJfgIwomx9X2vhcVEhvTFT2aj8VcPpIx_tr2YKwah8f6VpW7Em7KZa1pnwzp7tfABoug-m1_PaC5OLSr3cYt6qkEcYSPfWLuXUPjnAB6Q9-Q8TDe05JeGEytnNtZc9q/s1600/IMG_20121011_132135.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc4blYe2PzKa-KsYJfgIwomx9X2vhcVEhvTFT2aj8VcPpIx_tr2YKwah8f6VpW7Em7KZa1pnwzp7tfABoug-m1_PaC5OLSr3cYt6qkEcYSPfWLuXUPjnAB6Q9-Q8TDe05JeGEytnNtZc9q/s320/IMG_20121011_132135.jpg" width="320" /></a></div>
<div style="text-align: center;">
저도 한장 함께 찍었습니다 :)</div>
<div style="text-align: center;">
귀찮게 해서 미안해요, 토발즈 형님. 하지만 별 수 없었어요.</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
행사가 모두 끝난 후, 갑자기 사람들이 토발즈 형님 앞으로 몰려들었습니다. 이번엔 싸인행렬!</div>
<div style="text-align: left;">
줄이 세워지는 징조가 보이자마자 저도 줄을 섰습니다.</div>
<div style="text-align: left;">
어디에 싸인을 받으면 좋을까 고민을 1초 하다가, 맥북에어를 꺼냈습니다. 맥북 밑바닥에 싸인을 해주세요!</div>
<div style="text-align: left;">
토발즈 형님께서 이 기계(맥북 에어)에는 싸인을 하지 않겠다고 하시더군요(암, 그래야 제 토발즈 형님 답죠.ㅋㅋ). 크게 당황했지만 곧바로 제 맥북에어에 리눅스를 설치하고 리눅스 머신으로 사용하겠다고 약속하면서 다시 한번 싸인을 부탁했습니다. 감사하게도 싸인 성공!</div>
<div style="text-align: left;">
좀 우발적으로 한 약속이지만 지켜야겠죠. <b>당장의 목표는 제 맥북에어에 리눅스를 설치</b>하는 겁니다.</div>
<div style="text-align: left;">
이미 문서는 많은 것 같은데, 조만간 설치하고 작업 내용을 정리해서 공유해 볼까 합니다 :)</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0IwRKvc6pShEDD4YCiPx3jL3dCmoUCO47mmLL64AV2FTz5WhPLEPaNbWNRScfJI4jVhSsv_SliUHwD_MbG4P6Y4Sd2wlogKll_RBozCVWjRFAaJLnnULD2AwKdQ8Fs8l0caL7GT_dlMOm/s1600/IMG_20121011_170004.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0IwRKvc6pShEDD4YCiPx3jL3dCmoUCO47mmLL64AV2FTz5WhPLEPaNbWNRScfJI4jVhSsv_SliUHwD_MbG4P6Y4Sd2wlogKll_RBozCVWjRFAaJLnnULD2AwKdQ8Fs8l0caL7GT_dlMOm/s320/IMG_20121011_170004.jpg" width="240" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<b><i>Signed-off-by : Linus Torvalds</i></b> ;)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="font-size: x-large;">Day 2. 12th October - Technical Sessions & Party</span></div>
<div style="text-align: left;">
첫째날은 약간 이론/개념/철학적인 이야기가 주가 되었던 것에 반해, 둘째날은 철저히 기술적인 세션들로 이루어졌습니다.</div>
<div style="text-align: left;">
아침부터 세개의 방으로 나눠서 세개의 세션들이 동시에 진행되었습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="font-size: large;">Write and submit your first Linux kernel patch</span></div>
<div style="text-align: left;">
모두 인상깊고 많은 공부가 된 세션들이었습니다만, 하나만 이야기 하자면 아무래도 Greg의 세션이 인상깊었는데요.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4NNPtSWWFtlR-j7X2H8Hur9ow_tFUJ6muPNg0Hv7LDyrulcdseEC1IlhQfo1VvqYTlsNieI9-FsvF60kiTWOsayuf21xhuWZDcIloX3d7KH8hy9_YK40s2TcwWCk571cK351xU7ZM8Ry4/s1600/IMG_20121012_085729.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4NNPtSWWFtlR-j7X2H8Hur9ow_tFUJ6muPNg0Hv7LDyrulcdseEC1IlhQfo1VvqYTlsNieI9-FsvF60kiTWOsayuf21xhuWZDcIloX3d7KH8hy9_YK40s2TcwWCk571cK351xU7ZM8Ry4/s320/IMG_20121012_085729.jpg" width="240" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
아침에 강의장에 혼자 들어갔는데, Greg이 발표 준비를 하고 있더군요.</div>
<div class="separator" style="clear: both; text-align: center;">
발표 준비 마치고 나가기 전에 사진 한장!</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Greg이 발표한 세션의 주제는 How to submit patches effectively. 첫째날은 전반적인 커널 개발 프로세스를 이야기했다면, 좀 더 practical 하게 패치를 작성하고 보내는 방법, 이 때 주의할 내용 등에 대한 이야기였습니다.</div>
<div style="text-align: left;">
발표 내용은 곧바로 스크린캐스트로 녹화되어서 공개되었습니다.</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/XXix80GCvpo?feature=player_embedded' frameborder='0'></iframe></div>
<div style="text-align: left;">
안타깝게도 소리가 좀 이상합니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
이 세션이 흥미로웠던 이유 중 하나는, 저도 AOSP에 패치를 몇개 submit하고 merge 되는 경험을 해보고 나서 이를 바탕으로 AOSP에 패치를 보내는 방법 및 요령을 어느 행사에서 발표한 적이 있기 때문이었습니다.</div>
<div style="text-align: left;">
그리고, Greg의 발표에서 상당히 많은 배움을 얻었습니다. 좀 더 실질적이고, interactive 하고, 참여할 수 있는 발표 진행을 보여주더군요.</div>
<div style="text-align: left;">
발표내용은 소리가 좀 이상하지만 위 동영상을 보시면 될테고... 세션이 시작 전에 사람들에게 봉투를 하나 돌리며 그 안에 든 종이조각을 하나씩 가져가라고 하더군요.</div>
<div style="text-align: left;">
받아보니 리눅스 소스코드들 중 파일 하나하나의 경로. 이걸 수정해서 패치를 보내 보랍니다.</div>
<div style="text-align: left;">
복잡한 수정까진 필요없고 일단 코딩스타일 안맞는 것들을 좀 수정해 달라고.</div>
<div style="text-align: left;">
럴수럴수이럴수! 발표에의 집중도도 높이고 커널개발에 진입할 기회도 제공하고! 발표 내용이야 뭐 더이상 말할 게 없구요.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
한가지 아쉬웠던 건, 사람들의 반응이 뜨겁진 않았다는 겁니다. 청중도 많지는 않았고, 질문도 넘쳐나진 않더군요. 역시 우리나라에서 Contribution은 아직은 조금 서먹한 topic인가 봅니다.</div>
<div style="text-align: left;">
어느정도 예상했던 바이긴 하지만, 멋진 세션이었던 만큼 더 아쉽더군요.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="font-size: large;">삼원가든에서 불타는 금요일 PARTY</span></div>
<div style="text-align: left;">
포럼 스케쥴을 보면서 눈에 띄었던 게 둘째날 저녁 스케쥴이었는데요. 삼원가든으로 이동해서 저녁식사를 하기로 되어 있더군요.</div>
<div style="text-align: left;">
그리고, 첫째날 아침 키노트에서 둘째날 저녁 강남 스타일의 파티를 열 계획이라고.</div>
<div style="text-align: left;">
적당히 고기나 구워 먹겠지 했는데.</div>
<div style="text-align: left;">
정말 이렇게 먹어도 되나 싶을 정도로 고기 먹고, 여성 댄스그룹과 B-boy들의 공연까지 이어지는 정말 멋진 파티였습니다.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMJwIpWmYTvqTBFOcspm0-HD_4oKkxQUaT3EpuNdl09y6F91SwdnzbTSdxakIyZVXt363OP7zEG15xT9QqHyt-58IepVumdaTjAJMjD-RBI51Y6AqM7e-AEW6T4xnbaiVSzXIg6RqE23Qj/s1600/IMG_20121012_165026.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMJwIpWmYTvqTBFOcspm0-HD_4oKkxQUaT3EpuNdl09y6F91SwdnzbTSdxakIyZVXt363OP7zEG15xT9QqHyt-58IepVumdaTjAJMjD-RBI51Y6AqM7e-AEW6T4xnbaiVSzXIg6RqE23Qj/s320/IMG_20121012_165026.jpg" width="240" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
무대 뒤쪽에 위치한 작은 연못. 영롱한 빗깔의 잉어가 통통하더군요.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCZnuq-p-6KFMEEmZyXKv75y0LzxxsTruoJjC9X_nVb3REZUeP8oh6mRpGT5WbdT_lCfIT3LnQZbZVWr9rAUDzWF1BTwwDYBGEBbSXhunzI9q9BTPaqsj8mtxKThGWGMnZLFymp5fJzkbm/s1600/IMG_20121012_185002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCZnuq-p-6KFMEEmZyXKv75y0LzxxsTruoJjC9X_nVb3REZUeP8oh6mRpGT5WbdT_lCfIT3LnQZbZVWr9rAUDzWF1BTwwDYBGEBbSXhunzI9q9BTPaqsj8mtxKThGWGMnZLFymp5fJzkbm/s320/IMG_20121012_185002.jpg" width="240" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
고기를 먹고 나오니 여성 댄스그룹의 공연이 한창!</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
영웅과 같은 개발자들, 처음 보는 개발자분들과 만나고 사진도 찍고 명함도 나누고 이야기를 나누고.</div>
<div style="text-align: left;">
정말 꿈같은 이틀간의 포럼, 많은 에너지와 열정을 얻은 시간이었습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
행사를 주최/후원해주신 많은 관계자들과 회사에 감사의 말씀을 마지막으로 전하고 싶네요.</div>
<div style="text-align: left;">
말로만이 아니라, 항상 이런 자리 마련해주는 관계자/회사 분들께 진심으로 감사하고 있습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
#LINUX</div>
<div style="text-align: left;">
#LFKLF</div>
</div>SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com2tag:blogger.com,1999:blog-7298843278162929459.post-49645339589356467872012-09-20T23:05:00.000+09:002012-09-20T23:05:51.974+09:00구글 안드로이드 개발자 간담회, In-app Billing 발표내용과 그 논란에 대해.9월 17일 있었던 구글 안드로이드 개발자 간담회의 세번째 세션, Using In-app billing at Google Play는 최근 논란이 된 내용이라 재밌었기도 하고, 간단히 해당 내용과 제 생각을 좀 정리해 봅니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx8pyLWFQTUKhcrLOh-yueX191gISAyUDh8Qn0ioFq0QZ_sW6vOuZRnkfGGDKzTEeuEjJ_cuQJA7UP6-YyinIQtQa4a6Ii_c35x6ABi7oBmzXcrR-mDf0De3rsqqihLWSnX-VLsURmyJaT/s1600/IMG_20120917_195336.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx8pyLWFQTUKhcrLOh-yueX191gISAyUDh8Qn0ioFq0QZ_sW6vOuZRnkfGGDKzTEeuEjJ_cuQJA7UP6-YyinIQtQa4a6Ii_c35x6ABi7oBmzXcrR-mDf0De3rsqqihLWSnX-VLsURmyJaT/s320/IMG_20120917_195336.jpg" width="320" /></a></div>
<br />
<br />
In-app billing.<br />
얼마전 구글이 애플처럼 사악해져서 개발자들의 결제 모델을 통제하기 시작한다는 기사가 휘몰아쳤죠.<br />
이용료는 없지만 일부 아이템등을 현금으로 살 수 있는 온라인 게임처럼 안드로이드 앱들 중에도, 설치는 공짜거나 싼 가격이지만, 앱 내에서 카톡 선물처럼 게임 아이템을 사거나 특정 서비스를 추가로 요청할 때 사용자에게 요금을 받는 경우가 있습니다.<br />
이처럼 앱 내에서 추가 결제를 하는 것을 앱 내 결제라고도 하곤 하는데요.<br />
애플은 이를 위한 서비스를 자체적으로 제공하면서, 앱스토어에서 이 서비스 외의 방법으로 앱 내 결제를 하는 앱은 삭제해 버리겠다고 하고, 실제로 그렇게 해 논란을 일으킨 적 있습니다.<br />
<br />
구글에서도 이번에 이와 마찬가지로 구글 플레이에서 앱 내 결제를 위한 in-app billing 이라는 서비스를 내놓으면서, 구글 플레이에서 유통되는 앱은 앱 내 결제를 위해선 이 서비스만 이용해야 한다는, 애플과 똑닮은 정책을 내놓았습니다.<br />
애플과 달리 나름 개방적이라 여겨지던 구글의 이같은 강제 정책에 여러 논란이 있었던 것(아니, 현재 진행형인가요?)이지요.<br />
이에 대해 이야기를 해주셨습니다.<br />
<br />
in-app billing 서비스가 뭐고, 어떻게 사용하면 되는지에 대한 자세한 정보는 여기(<a href="http://developer.android.com/guide/google/play/billing/index.html">http://developer.android.com/guide/google/play/billing/index.html</a>)를 참고하시면 됩니다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC2HdD3tBPJ9pGzaDGMWb_OStjKxt6yzw08yTyvlt0ZOO7322pQaC0mEYnmkswoEvrpV8KslfXgkABRZFOm_ppRzD3b7JAfMMaU4EHcP0vXW6hBceTtZfb7VFsye_h2VtK8buY32K3A_oB/s1600/billing_checkout_flow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="174" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC2HdD3tBPJ9pGzaDGMWb_OStjKxt6yzw08yTyvlt0ZOO7322pQaC0mEYnmkswoEvrpV8KslfXgkABRZFOm_ppRzD3b7JAfMMaU4EHcP0vXW6hBceTtZfb7VFsye_h2VtK8buY32K3A_oB/s320/billing_checkout_flow.png" width="320" /></a></div>
<br />
간단히 정리해보자면, 사용자의 기기에 있는 구글 플레이 어플리케이션에게 Binder를 통해 요청 메세지를 보내면 마켓 어플리케이션이 사용자 계좌로부터 개발자 계좌로의 금액 결제를 대신해 주는 건데요.<br />
<br />
<br />
그리고, in-app billing의 제약사항은 다음 링크에 있으며, in-app billing 에 대한 내용은 다음과 같습니다.<br />
<br />
<a href="http://play.google.com/about/developer-content-policy.html#showlanguages">http://play.google.com/about/developer-content-policy.html#showlanguages</a><br />
<br />
<ul style="background-color: white; color: #444444; font-family: arial, sans-serif; line-height: 20px; margin: 10px 10px 10px 30px; padding: 0px;">
<li id="IAP"><strong style="color: black; font-size: 13px;">In-app purchases:</strong><span style="font-size: x-small;"> Developers offering additional content, services or functionality within an application downloaded from Google Play </span><b><span style="font-size: large;">must</span></b><span style="font-size: x-small;"> use Google Play's payment system as the method of payment, except:</span></li>
<ul style="font-size: 13px; margin: 0px 10px 0px 30px; padding: 0px;">
<li>where payment is primarily for physical goods or services (e.g. buying movie tickets; e.g. buying a publication where the price also includes a hard copy subscription); or</li>
<li>where payment is for digital content or goods that may be consumed outside of the application itself (e.g. buying songs that can be played on other music players)</li>
</ul>
</ul>
<div>
</div>
<br />
간단히 번역해보죠.<br />
사용자가 구글 플레이에서 다운받은 어플리케이션 내에 추가적인 컨텐트나 서비스 또는 기능을 제공하는 개발자는 그 결제 수단으로 <b><span style="font-size: large;">반드시</span></b> 구글 플레이의 결제 시스템을 사용해야 한다.<br />
예외조건:<br />
<br />
<ul>
<li>물리적 물건이나 서비스를 위한 결제의 경우(예를 들어, 영화 표를 산다거나, 실물책 구독 등과 같은 간행물 구매 시) 또는,</li>
<li>어플리케이션 자체 외부에서 사용되는 디지털 컨텐트인 경우(예를 들어, 어플리케이션 외의 mp3 플레이어 등에서 재생 가능한 음악 - mp3 -)</li>
</ul>
<br />
<br />
결국, in-app billing은 구글 플레이와 연동되어서 제공되는, 앱 내 결제 서비스 입니다. 구글 플레이에서 유료 앱을 구매하면 구글 플레이에서 자동으로 통신사와 연결해서, 또는 신용카드 정보 등을 이용해서 결제를 하죠. 상당히 편리하고, 이미 익숙한 방법입니다.<br />
저는 100원 앱 세일 할 때 유료 앱 몇개 결제해 봤는데, 별다른 정보를 입력하거나 active-x 따위와 씨름할 필요 없이, 통신사와 연결되어서 클릭 몇번으로 결제가 끝나더군요.<br />
<br />
in-app billing은 그러한 구글 플레이의 결제 시스템을 앱 내에서도 제공할 수 있도록 하는 서비스입니다. 앱 개발자는 in-app billing 서비스를 이용함으로써, 별도의 결제 시스템을 구축할 필요 없어 좋고, 사용자는 이미 친숙하고 신뢰 할 수 있는(구글느님께서 만드셨다는데 신뢰해야지 어쩌겠습니까) 구글 플레이 구매 시스템을 이용해 결제를 할 수 있도록 할 수 있는 거죠.<br />
발표자께서도 특히 <b>사용자 입장에서의 편리성</b>을 강조하시며, <b><span style="font-size: large;">consistent experience</span>를 제공할 수 있는게 큰 장점</b>이니, <b><span style="font-size: large;">부디, 부디(please, please)</span> </b>in-app billing을 사용해 달라 하시더군요.<br />
또한, <span style="font-size: large;">in-app billing의 수수료는 30%</span>나 되지만, 이는 대부분 통신사 등에 가는 돈이지 구글에서 돈벌어 먹으려 그러는 게 아니고, 통신사로 가는 30%가 크다고 생각할 수도 있지만 어디까지나 <span style="font-size: large;">유저에게 편리한 일관된 사용경험을 만들기 위한 비용</span>이며, 유저의 일관된 사용경험은 그럴만한 가치가 있다고 이야기 했습니다.<br />
<br />
이외에 질답을 통해 환불이 가능하고, in-app billing의 강제 조건의 예외 조건 등을 이야기 해주셨습니다만, 발표자께서 말씀해주신 주요 내용은 여기까지구요.<br />
제 생각을 좀 더 정리해 보겠습니다.<br />
<br />
대부분 동의합니다. 유료 앱을 구매한 건 몇번 안되지만, 구글 플레이가 제공하는 결제 방식은 비교적 편리했고, 마음에 들었습니다. 이런 경험을 앱 내에서의 결제 방식에도 가져간다는 것은 앱에게 큰 장점이 될거라고 생각합니다. 구매도 구글 플레이에서 했는데, 앱 내 결제도 구글 플레이 방식으로 한다는 건 말 되는 이야기죠. 더구나 그걸 도와주는 서비스라니, 제가 앱 내 결제를 사용하려는 개발자라면 이걸 사용하겠습니다.<br />
일관된 사용자 경험, 얼마나 좋습니까?<br />
<br />
문제는, 구글 플레이에 올린 앱에서 in-app billing이 아닌 다른 수단으로 앱 내 결제를 하면 <b>구글 플레이에서 퇴출</b>된다는 강제사항인데요.<br />
<br />
<div>
<b>MUST. 반드시.</b></div>
<div>
<br /></div>
<div>
아, 굉장히 맘에 안드는 단어입니다.</div>
<div>
<br /></div>
<div>
좋은 서비스란 건 알겠는데, 세상에는 많은 이해관계가 있고, 많은 특수성이 있기 마련인데, 반드시 그것만 써야 한다니...</div>
<div>
애플은 사악하고 closed 되어 있는 독재체제지만 안드로이드는 그렇지 않다고 믿어왔고, 자랑거리였는데, 이제 더이상 그렇지 않은 걸까요? 구글이나 애플이나 그놈이 그놈이고 다 장사꾼이니 세상에 믿을 놈 하나 없는 걸까요? 구글 의존성을 막기 위해 우리나라만의 독자적인 OS를 만들어야 할 것 같습니다. 한민족의 힘을 보여줍시다.</div>
<div>
<br /></div>
<div>
좀 과장해 봤습니다만, 저런 생각 중 일부는 드는 것도 사실입니다.</div>
<div>
하지만, 조금 더 생각해 보죠.</div>
<div>
<br /></div>
<div>
기술로써의 안드로이드(조금 더 정확히는 AOSP)는 항상 개방적이었고, 여전히 개방적이고, 앞으로도 개방적일 것(바램에 불과하지 않기를...)입니다. 누구나 소스 코드를 이용할 수 있고, 이걸 가져다가 조금 변형해서 뭘 만들든 자유입니다.<br />
<br />
구글 또한 여타 third party 제조사/소프트웨어 개발사들과 마찬가지입니다. 아마존이 기술로써의 안드로이드를 가져다가 Kindle Fire를 만들고 자신만의 앱 판매 서비스를 제공하듯, 구글 또한 <b>기술로써의 안드로이드를 가져다가 Google Android라는 이름으로 사업</b>을 하는 거죠.<br />
<br />
구글의 안드로이드 사업은 예전에는 신경을 안쓰는 건가 싶을 정도로 개방적이었고, 지금은 조금씩 체제를 정비해 가고 있는데, UX만 괜찮아 진 게 아니라 좀 논란스러운 강제조건도 생겨나고 있습니다. 하지만, 이런 논란스럽고 강제적인 내용은 기술로써의 안드로이드는 개방된 상태를 유지하는 것을 보장하는 한계 내에서 부가적인 방식으로 진행되고 있습니다.<br />
<br />
in-app billing 또한 마찬가지입니다. 기술로써의 안드로이드는 in-app billing과 전혀 관계 없습니다. in-app billing이 강제조항이라 맘에 안들지만 기술로써의 안드로이드는 in-app billing과 무관한 개방 상태기 때문에 구글 플레이로 배포하지만 않는다면 대안은 많아요.<br />
국내는 T-store가 구글 플레이보다 더 개발자 수익성에 도움이 된다는 이야기도 있구요.<br />
<br />
하지만, 구글이 사업으로 제공하는 서비스인 구글 플레이를 사용하려면 구글의 조건을 들어야 한다는 거죠. 구글 플레이는 apk 올려둘 수 있는 무료 웹하드가 아니라 보다 좋은 사용자 경험으로 사용자와 개발자들이 만날 수 있도록 제공하면서 구글이 돈버는(하지만 in-app billing의 수수료는 거의 다 통신사 등에 간다더군요) 서비스 사업이니까요.</div>
<div>
<br /></div>
<div>
<b>쉴드는 여기까지.</b><br />
그렇다곤 해도, 구글의 안드로이드 사업은 아마존의 안드로이드와 달리, <b>사실상의 안드로이드 표준</b>이기 때문에, 이 강제조항이 미치는 파급효과는 무시할 수 없습니다.<br />
누가 기술과 사업의 안드로이드를 구분해서 생각합니까? 그냥 대충 한뭉텡이로 묶어서 안드로이드지. 이게 그냥 대충도 아니고, 정말 안드로이드를 위에서 밥벌어먹는 사람에게 구글의 사업 정책 변화는 정말 중요한 요소입니다.<br />
상당히 reasonable 한 이유고, 사용자를 위한 방향이라고 하지만, 어쨌건 폐쇄적인 게 옳지 못하다고 생각하는 사람들은 이걸 가지고 구글을 깔 명분은 충분하다고 봅니다.<br />
<br />
호텔 식당에 한복 입은 사람은 들어오지 말라고 호텔이 말했다고 해도 어쩌겠습니까, 호텔 소유지인데. 하지만 좋게만 볼 순 없는 일입니다. 더구나 그 호텔이 사막 한가운데 위치한 몇개 안되는 호텔 가운데 하나라면요. 그 한복이란 게 실은 벼룩과 세균이 득시글거리는 걸인이 걸친 넝마였고, 호텔에서는 식당 입장을 위한 멋지고 튼튼한 옷을 거의 무료로 제공하거니와, 이를 몇번이나 공지했는데도 들은척도 안하더라는 비교적 합리적인 설명이 있으면 주관에 따라 개개인의 생각은 바뀌겠지만요.<br />
<b>어쨌건 충분히 생각해 보고, 까야겠다고 여전히 생각하는 사람은 까야 할 사안이라고 봅니다.</b><br />
<br />
<br />
어쨌건 이제 우린 어떡하면 좋을까요?<br />
사실, 너무 걱정할 필요는 없다고 봅니다. 구글 플레이에서 구매한 앱에서는 In-app billing을 사용하고, 다른 앱 내 결제가 반드시 필요하다면 T-store 나 Samsung apps 등에 올리면 되죠.<br />
<br />
개발할 때 여러개의 앱 내 결제를 구현해야 하고, 구글 플레이에서 구매한 앱인지, 다른데서 구매한 앱인지 체크해야 하는 번거로움이 있지만, 어쨌든 대안은 존재합니다.<br />
<br />
하지만, 개발자 분들은 좀 더 일이 늘었고, 회사의 결정에 따라 없어도 될 코드를 짜야 하는 경우가 많아질 것이며, 이를 위한 충분한 시간을 주지는 않는 경우가 많을 것 같습니다.<br />
이런 불운한 상황에 처한 분들께는 그저 애도를 표합니다...</div>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com2tag:blogger.com,1999:blog-7298843278162929459.post-66939054636343600182012-09-18T01:15:00.002+09:002012-09-18T01:15:38.506+09:00Google Android 개발자 간담회 후기9월 17일 월요일, 구글 코리아에서 구글 안드로이드 개발자들과의 간담회가 있었습니다.<br />
<a href="http://googledevkr.blogspot.kr/2012/09/google-android.html">http://googledevkr.blogspot.kr/2012/09/google-android.html</a><br />
<br />
상당히 많은 분들이 참가신청을 한 것 같아 보였는데, 한정된 장소 탓에 참가를 못하게 된 분들도 있었던 것 같지만, 운좋게도 저는 참가를 할 수 있게 되었습니다.<br />
시작시간은 6시. 비교적 이른 시간이었는데도 다들 일찍 오셨더군요.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-OeC3zwFQAr4_nEicR7HGA4XcLKkOumSN1Qen2n2l9s82uczYFNqSpwiPGdihD9LYvG0F70MfQyzz2m7M2EB27LEDzCkE236NqZd_MJTXSteqv_JBVau9uSOgG4iZcMx3H_YjU9b8vg2E/s1600/IMG_20120917_182947.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-OeC3zwFQAr4_nEicR7HGA4XcLKkOumSN1Qen2n2l9s82uczYFNqSpwiPGdihD9LYvG0F70MfQyzz2m7M2EB27LEDzCkE236NqZd_MJTXSteqv_JBVau9uSOgG4iZcMx3H_YjU9b8vg2E/s400/IMG_20120917_182947.jpg" width="400" /></a></div>
<br />
<br />
발표 내용은 다양했고, 개발자로써 역시 첫번째와 두번째 세션이 가장 재밌었습니다.<br />
첫번째 세션은 Definitive Android Design. 안드로이드 어플리케이션 디자인에 대한 내용이었는데요. 이미 많이 들은 이야기라 식상하게 들렸을 수도 있지만, 원론적인 이야기만 하는게 아니라 구체적인 사례와 실제 수치 등을 들어가며(48dp 는 약 9mm 라든지) 상당히 구체적인 경우들을 이야기하는 게 인상적이었습니다. 흔히 말하는 1000피트 뷰로 이야기 하지만, 가려운 곳은 1피트까지 내려가 주는 기분이었달까요?<br />
두번째 세션은 What's new in Android? 라는 주제로, 젤리빈에서 있었던 변화들을 이야기 했는데, 역시 Project Butter 이야기가 재밌었습니다. Google IO 영상으로 한번 들은 이야기지만, 다시 들으니 좀 더 이해가 잘 되고, 모호하던 부분이 좀 이해되더군요.<br />
<br />
세번째, 네번째 세션은 각각 Using In-app billing at Google Play, How to get featured 라는 제목으로, 구글 플레이에 대한 이야기가 있었는데요. 비교적 짧은 시간으로 발표를 마치고 주로 QnA를 가졌습니다.<br />
<br />
발표는 영어로 진행됐지만 다들 잘 알아들으시더군요. 전 잘 못알아듣겠던데... 그래도 발표자들께서 또박또박 천천히 이야기 해주는 편이어서 그나마 몇마디는 알아들었습니다.<br />
QnA도 영어로 진행됐고, 몇몇 분은 한국어로 질문하시고 행사를 진행하신 권순선님께서 영어로 이를 옮겨주시는 형식을 취하기도 했는데, <b>발표자 분들이 한국어로 한 질문을 이해해 버리기도</b> 했습니다. 역시 개발자는 만국공통인 걸까요.<br />
<br />
저는 갤럭시S3가 ICS면서도 기본 앱들은 액션바를 안쓰는 경우도 있고, 심지어 메뉴키를 유지한데 대해 어떻게 생각하는지, 메뉴키 없애도록 강제할 생각은 없는가 하는 질문을 던졌는데, 안드로이드 개방성 특성이고, 강제로 메뉴키 없앨 계획은 없다고 역시 유연하게 답변하시더군요.<br />
저 또한 강제적으로 메뉴키를 없애려 한다면 실망했을 것 같긴 하지만 너무 유연하고 일반적인 답변은 재미가 없는 것도 사실이죠. 그렇다고 거기서 리누스 토발즈가 nvidia에 세번째 손가락 보여준 것처럼 Samsung에 f... 뭐 그러길 바란 것도 아니긴 하지만요 ;)<br />
<br />
발표가 다 끝나고 나서는 자유롭게 갈사람은 가고, 할 이야기 있는 사람들은 발표자들과 자유롭게 이야기 하는 시간이 있었는데요. in-app billing 쪽이 역시 인기가 좋더군요.<br />
<br />
저는 남들 이야기 하는거 들어보기도 하고, 그간 개발자 모임에서 낯이 익은 능력자 개발자 분들과 이야기 좀 더 하고 몇분들과는 자리를 옮겨서 커피 한잔 하며 이야기좀 하고 돌아왔습니다.<br />
<br />
상당히 즐겁고 유익한 시간이었고, 항상 개발자들 위해 물심양면 노력해 주시는 구글 코리아와 권순선 님께 감사의 말씀 드립니다.SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-84101703365906973682012-08-26T18:15:00.003+09:002012-08-26T18:58:09.210+09:00[우분투] 두개의 패키지가 상호 의존성을 가지고 있을 때...dpkg를 사용해 패키지를 설치하는데, 패키지 A 는 패키지 B가 깔려 있어야 하고, 패키지 B는 패키지 A가 깔려 있어야 한다면서 설치가 안되는 경우가 있다.<br />
<div>
이럴 땐 두개의 패키지를 한꺼번에 설치하면 된다.</div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><i>$ dpkg -i A.deb B.deb</i></span></div>
SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-62029206978654084632012-07-14T02:14:00.001+09:002012-07-14T02:14:39.283+09:00도자기<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO9-VsSE0ByL-VNGEAyrr-TCV66hKzpyoDudNE7h0qBAK2c5j9SlBWsJ8JaIXcNeryJyVYvxB9XnT2PGSfd1x41DpMznzjunBfmjX1bQM-T3YjRMgdfsh3r2evL6KnTkMPfj1K4fDVkh2S/s1600/IMG_20120714_013802.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO9-VsSE0ByL-VNGEAyrr-TCV66hKzpyoDudNE7h0qBAK2c5j9SlBWsJ8JaIXcNeryJyVYvxB9XnT2PGSfd1x41DpMznzjunBfmjX1bQM-T3YjRMgdfsh3r2evL6KnTkMPfj1K4fDVkh2S/s320/IMG_20120714_013802.jpg" width="240" /></a></div>
<br />
<br />
<b>"도자기들을 바라보고 있으면 누군가의 얼굴이 떠올라.</b><br />
<b>이 그릇들은 우리가 좋아하는 사람의 얼굴을 닮았거든."</b><br />
<br />
도자기. 아마 2007년인가 그 무렵부터 네이버 웹툰에서 연재되었던 웹툰입니다.<br />
사실 연재될 때에는 존재도 모르다가 책이 출간된 후에야 우연히 알게 되어 작가인 호연님의 홈페이지를 자주 드나들었고, 거기서 지금은 자주 듣는 몇개의 음악도 접하게 되었죠.<br />
<br />
작중 작가를 의미하는 듯한 캐릭터가 남자일 때도, 여자일 때도 있어 작가는 남자다 여자다 하는 소문도 많았는데, 그거야 열린 결말로 두기로 하고.<br />
<br />
어떻게 보면 국가의 보물이고, 어떻게 보면 그저 예전에 살던 소시민의 작품이며, 사실 우리에겐 박물관 가면 유리 안에 놓여 있는 케케묵어 보이고 따분한 그릇(나만 그런건가? 내가 이상한건가~?)이었던 도자기를 소재로, 그 안에 얽힌 이야기나 감상을 톡톡 튀는 상상력과 꽉꽉 짜인 구성으로 재미있고 예쁘게, 때로는 가슴을 저밀고, 가끔은 날카로운 눈매로 묘사해내고 있습니다. 그 상상력과 표현력은 그야말로 경외로움 그 자체예요.<br />
<br />
도자기로부터 일상을 따냈다는 느낌이 아니라, 우리의 일상이 실은 도자기에도 그려져 있다는 느낌입니다. 과거의 도자기가 아니라 우리의 도자기, 우리의 일상, 우리의 얼굴이라고나 할까.<br />
<br />
인용한 문구 그대로, 우리가 좋아하는 사람의 얼굴을 그린 도자기에서 우리가 좋아하는 사람의 이야기를 꺼내어 그려낸 작품입니다.<br />
<br />
후둑 후둑 비내리는 장마철 밤, 이 책을 펴고 당신이 좋아하는, 좋아했던 사람의 얼굴을 한번 더 마주해 보시길.<br />
<br />
<br />
<br />
p.s 작가인 호연님에 대해선 남녀논란부터 시작해서 수많은 논란이 있습니다. 하지만, 참 좋은 작품을 그려주시는 작가님임에는 논란의 여지가 없는 것 같습니다. 요즘 작품활동이 뜸한 거 아닌가 싶은데, 한번 더 빵 터뜨려주시길.<br />
<br />
p.s2 책을 살 돈이 없다면 여전히 웹에 공개되어 있으니 한번쯤 정주행을 추천합니다.(<a href="http://comic.naver.com/webtoon/detail.nhn?titleId=22090&seq=1&weekday=">http://comic.naver.com/webtoon/detail.nhn?titleId=22090&seq=1&weekday=</a>)<br />SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0tag:blogger.com,1999:blog-7298843278162929459.post-40142283633439323862012-07-08T17:53:00.003+09:002012-07-19T15:48:46.666+09:00[안드로이드] SDK tool revision20 이후 에뮬레이터의 segmentation fault 문제 - 진행중새로운 컴퓨터를 받아 64비트 환경에 Ubuntu 10.04를 설치했는데, 안드로이드 에뮬레이터를 실행하면 segmentation fault가 뜨고 있다.<br />
<div>
<br /></div>
<div>
검색해보니 관련 문제에 대한 토론이 진행되고 있다. 하지만 최근 문제라 아직 결과는 나오지 않았다.</div>
<div>
<span style="color: #0000ee; text-decoration: underline;">http://code.google.com/p/android/issues/detail?id=34233</span><br />
<div>
<br /></div>
<div>
64비트 시스템과 nvidia 를 함께 사용하는 환경에서 나타나는 문제인 듯 하다. 리누스가 얼마전 nvidia 에게 중지를 세운 감정을 조금이나마 알 것 같다.<br />
하지만 정황상 nvidia 보다는 구글쪽 실수인 것도 같다는 근거 없는 심증이 든다.</div>
<div>
<br />
<br />
<span style="font-size: large;">ICS 이상 버전</span></div>
<div>
워크어라운드라긴 뭐하지만, 아래의 방법으로 IceCream Sandwitch 이상 버전을 타겟으로 하는 에뮬레이터는 실행이 가능하다. 하위 버전은 이 방법도 안통한다.</div>
<div>
<AVD-name-that-target-ICS-or-later> 은 ICS 이상을 타겟으로 생성한 AVD의 이름으로 교체하면 되겠다.</div>
<div>
<br /></div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;">$ emulator -gpu on @<AVD-name-that-target-ICS-or-later></span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span><br />
<span style="font-family: inherit;">이클립스를 선호한다면, 이클립스의 AVD 설정 중 H/W property 에 GPU를 추가해서 yes로 값을 바꿔주자. ICS 이상 버전의 AVD는 이걸로 에뮬레이터가 잘 돌아간다.</span><br />
<span style="font-family: inherit;"><br /></span><br />
<span style="font-family: inherit;"><br /></span><br />
<span style="font-family: inherit; font-size: large;">HoneyComb 이하 버전</span><br />
<span style="font-family: inherit;">HoneyComb 이하 버전의 에뮬레이터를 돌려야 한다면, sdk 설치 디렉토리 아래 있는 libOpenglRender.so의 이름을 아무걸로나 바꿔준다.</span><br />
<span style="font-family: inherit;">다음과 같이.</span><br />
<span style="font-family: inherit;"><br /></span><br />
<span style="font-family: 'Courier New', Courier, monospace; font-size: x-small;">$ <span style="background-color: white;">mv <path-for-sdk>/tools/lib/libOpenglRender.so libOpenglRender.so.bak</span></span><br />
<span style="font-family: inherit;"><br /></span><br />
<span style="font-family: inherit;">에뮬레이터가 라이브러리를 찾지 못해서 소프트웨어 렌더러를 사용한다는 경고를 내뱉지만 에뮬레이터는 잘 실행된다.</span><br />
에뮬레이터 속도를 높이기 위해 하드웨어 가속을 하는 방향으로 여러가지 개선이 있었던 걸로 아는데, 그러다가 생긴 문제인 듯 하다.</div>
</div>SeongJaehttp://www.blogger.com/profile/07861105412201049221noreply@blogger.com0