Self의 환경과 프로그래밍 언어(네 번째: 커뮤니티, 역사, 미래, 형이상학)

ko생성일: 2025. 10. 23.갱신일: 2025. 10. 23.

Self 언어와 환경을 둘러싼 커뮤니티, 역사와 굴곡, 향후 발전 방향과 파생적 영향, 그리고 더 큰 맥락과 비전까지 폭넓게 살핀다.

@2019/02/27

이전 편들은 주로 언어와 환경 자체에 초점을 맞췄다. 오늘은 Self를 둘러싼 커뮤니티, 역사, 앞으로의 발전, 그리고 Self가 가져온 가능성과 함의를 살펴본다.

커뮤니티 관점에서

Self 커뮤니티는 다소 이례적이다. 상당 부분이 학계 인사와 수십 년간 Self를 지켜봐 온 사람들로 구성되어 있다. 이들은 Self에 관한 학술 작업을 읽거나 그 위에 기반한 연구를 즐겨 보지만, 언어 자체나 토론에 활발히 기여하는 경우는 많지 않다.

사람들

Self는 주로 David Ungar와 Randall Smith가 만들었다. 두 사람 모두 여전히 때때로 토론에 참여한다.

현재 핵심 추진자는 Russel Allen으로, 자신의 계정에서 GIT 저장소를 호스팅하고, 웹사이트를 만들고, 블로그를 운영하며, 머지 리퀘스트를 통합하고, 토론을 중재한다.

또 다른 핵심 기여자는 Chris Double로, GitHub와 메일링 리스트에서 자주 댓글을 남긴다. IRC 채널에서는 doublec라는 닉네임으로 볼 수 있다.

메일링 리스트

대부분의 소통은 Yahoo groups 메일링 리스트를 통해 이루어진다. Yahoo 계정으로 로그인하기 싫다면:

Post Message: self-interest[a]yahoogroups.com

Subscribe: self-interest-subscribe[a]yahoogroups.com

Unsubscribe: self-interest-unsubscribe[a]yahoogroups.com

List Owner: self-interest-owner[a]yahoogroups.com

NNTP

위 메일링 리스트를 유스넷 그룹처럼 구독하고 싶다면 이메일 대신 NNTP를 강력히 추천한다. 예를 들어 Gmane를 사용할 수 있으며, 그룹은 gmane.comp.lang.self로 찾을 수 있다. 구독에는 Thunderbird 같은 클라이언트를 쓰면 된다. Gmane 웹은 최근 크래시 이후로 잘 작동하지 않지만 NNTP 인터페이스는 정상이다.

news://news.gmane.org:119/gmane.comp.lang.self

시행착오 끝에 알게 된 사실인데, 메일링 리스트는 Self에 직접적으로 묶이지 않은 어떤 토론에도 별로 적합하지 않다. 지난 10년간 20통 정도의 메일만 오갔던 그룹에서 갑자기 메일이 많이 오기 시작하면 사람들은 불편해한다.

GitHub 이슈

개인적으로 모든 기술적 논의는 GitHub 이슈로 옮길 것을 권한다:

https://github.com/russellallen/self/issues

여기에는 주제에 관심 있는 사람들이 주로 참여하며, 코드와 가능한 해결책에 대해 소리 내어 생각한다고 해서 비난하지 않는다.

IRC 채널

반쯤은 죽어 있는 IRC 채널도 있으며, 가끔 누군가 들어와서 대화를 촉발한다:

irc://#self-lang@irc.freenode.org

나도 1년이 넘게 상주하고 있는데, 갖가지 주제의 대화가 환영받지만 대부분이 채널을 적극적으로 보진 않는다. 그래서 반응이 오기까지 며칠이 걸릴 수도 있다. 너무 낙담하지 말고, 정말로 누군가 답하길 원한다면 클라이언트를 백그라운드에 오래 켜 두자(서버의 irssi 등).

소셜 네트워크

/r/selflanguage 서브레딧이 있으며, 주로 새 소식을 알릴 때 쓰인다. 대부분은 이후 hackernews, /r/programming, lobstery로도 전달된다.

블로그

블로그도 있지만, 본문 폭이 460픽셀이라 보기 좋지 않다. 또한 원하는 대로 자유롭게 글을 쓸 수 있는 곳도 아니다. 운영자가 마음에 들지 않으면 일부를 그냥 지운다(직접 겪음). 그래서 abclinuxu나 다른 블로깅 서비스처럼 일반적인 블로그 환경은 아니다.

개인적으로 가장 불만인 점은 포맷 자체가 기술 글쓰기와 완전히 맞지 않는다는 것이다. 워드프레스 편집 경험도 그렇고, 무엇보다도 끔찍한 국수 면발 같은 좁은 본문이 모바일의 최악을 데스크톱 화면으로 가져온다.

거기에 글을 쓰고 싶다면 Russel Allen에게 이메일을 보내면 며칠 내로 계정을 만들어 준다. 그래도 전반적으로는 각자 공간을 마련하는 쪽을 더 추천한다.

블로그는 NNTP로도 구독할 수 있다:

news://news.gmane.org:119/gwene.org.selflanguage.blog

그리고 RSS:

역사적 관점에서

언어의 첫 버전은 1986년 Xerox PARC에서 David UngarRandall B. Smith가 설계했다. PARC는 Smalltalk, 이더넷, 레이저 프린터, 그리고 오늘날의 개념인 그래픽 사용자 인터페이스의 상당 부분이 탄생한 곳이기도 하다.

이후 1987년부터 스탠퍼드 대학교에서 Craig Chambers, Urs Hölzle, Ole Agesen, Elgin Lee, Bay-Wei Chang, David Ungar가 개발을 이어 갔다. 이 시기에 최초의 컴파일러와 Morphic 프레임워크 위에 구축된 그래픽 인터페이스가 만들어졌다.

1991년 개발은 Sun Microsystems로 옮겨졌고, 1995년의 굵직한 4.0 버전까지 여러 버전이 출시되었다. 그 무렵 가장 초기의 JIT(Just-In-Time) 컴파일러 중 하나가 개발되었고, 이를 통해 Self는 최적화된 C 코드 대비 대략 절반에 이르는 성능을 달성할 만큼 최적화되었다. 또한 당시 Self에는 Smalltalk 인터프리터가 구현되었는데, 그 시대의 네이티브 컴파일 버전보다 더 빠르게 동작했다.

그 후 Sun은 Self 지원을 중단하고 Java에 집중하기로 했다. 당시 Sun Microsystems 직원이었던 Chuck McManisHacker News 스레드에서 최근 이렇게 썼다:

모르는 분들을 위해: 한때 Sun 내부에서는 TCL, Java, Self(모두 Sun이 자금을 대던 프로젝트) 사이의 경쟁이 있었다. 당시 Sun Labs의 소장이자 Ivan Sutherland의 형제였던 Bert Sutherland가 언어 변경을 중단시키고, 각 언어를 검토해 어떤 것을 이어갈지 결정하자고 요구했다. 1995년 독일 다름슈타트에서 열린 WWW 회의에서 세상이 약간 폭발하자, Java가 공식적으로 “승리”했고 Self와 TCL은 중단되었다. (완전 종료는 아니고, 단지 더 이상 자금 지원이 없었다)

왜 하필 Java가 승리했느냐는 질문에 그는 이렇게 답한다:

당시에는 웹페이지 안에 실행 가능한 콘텐츠를 만들 수 있는 능력이 관건이었다. 오늘날 이 분야의 지배자는 자바스크립트지만, WWWC 2까지는 거의 모두가 페이지 레이아웃의 원시 기능에 의존했다. Java는 우리에게 오늘날의 상태(동적 페이지)로 가는 길을 보여주었고, 그래서 모두가 자신의 브라우저가 이를 지원하길 원했다. 지원하지 않으면 HotJava 브라우저를 실행하면 됐다. 다시 말해, Java는 많은 사람들이 가진 문제에 대한 답을 제공했고, ‘오픈 소스’ 방식으로 그 문제를 해결하겠다고 약속했다. 프로그래밍 언어에 관한 냉혹하고 씁쓸한 진실은 역사적으로 ‘우아함’은 중요하지 않으며, 당면한 문제에 대한 ‘실용성’만이 유일하게 중요하다는 것이다.

이것이 Self에는 오랜 침체의 시작이었다. 완전히 죽은 것은 아니었지만, 하드코딩된 최적화 때문에 SPARC 프로세서에서만 동작했던 점도 겹쳐 대부분의 사람들이 관심을 잃었다.

1997년 Sun은 Self의 JIT 최적화를 이끌던 인물들이 모인 Animorphic Technologies를 인수했다. 이들은 Self 개발에서 얻은 통찰을 바탕으로, 그때까지 매우 느리고 비효율적이던 Java를 가속하기 위한 HotSpot 기술을 만들었다. 그 결과 Self는 몇몇 핵심 인력을 잃었을 뿐 아니라, Java의 큰 단점 중 하나였던 ‘느림’도 사라졌다.

1999년에는 Linux 위에서 Self를 실행하려는 초기 시도가 나왔지만 오랫동안 매우 불편했다. 한편 David Ungar의 포팅 덕분에 PowerPC 프로세서를 쓰던 Apple 하드웨어에서 Self를 돌릴 수 있게 되었다. 맥북은 Sun의 Sparc 워크스테이션보다 훨씬 저렴하고 구하기 쉬웠기 때문에, Self를 “일반인”도 처음으로 사용할 수 있게 되었다.

2009년 David Ungar는 Self로 Dahl–Nygaard 상을 수상했다.

이듬해인 2010년에는 Russel Allen이 4.4 버전을 발표했다. 이는 리눅스에서 공식적으로 네이티브 실행된 첫 버전이었다. 다만 2001년부터 Self4Linux 프로젝트를 통해 Self를 구동할 수 있긴 했지만, 공식 버전은 아니었다. 그 이전에는 1999년 Gordon Cichon의 포트가 있었다.

4.4가 나온 뒤로도 개발은 소수 인력에 의해 이어지고 있다. 이 글을 쓰는 시점의 최신 버전은 2017년 5월에 발표된 2017.1이다.

미래 관점에서

Self 작업 현황

현재 Self에 대한 작업은 느리고 산발적이다. 주로 각종 버그 수정과 여러 가지 개선이 이루어진다. 나도 그래픽 인터페이스에 유니코드 지원을 추가하려고 착수했고 부분적으로 진전을 이루었지만, 개인 사정으로 우선순위를 조정하면서 이 프로젝트를 더는 시간상 감당하기 어려웠다.

그래픽 인터페이스는 반드시 손봐야 한다. 작동은 하지만 오늘날 기준으로 사용자 친화적이지 않고, 무엇보다 오류 허용도가 가혹하다. 여러 예제를 시도하는 것만으로도 시스템 전체가 여러 번 다운됐다. 특별한 게 필요한 것도 아니다. 약간만 오타를 내도 시스템이 그나마 나은 경우엔 멈춘다.

커뮤니티에서는 일부 Smalltalk 시스템에서 볼 수 있는 메커니즘처럼, 크래시 직전 지점으로 복구할 수 있는 로그 기반의 복구 기능이나, 자동 복구 지점 저장 같은 것을 도입하자는 논의가 여러 차례 있었다. 물론 애초에 시스템을 이렇게 쉽게 다운시키거나 멈추게 할 수 없게 만드는 것도 바람직하다.

모든 텍스트 에디터가 개선이 필요하다. 종종 Windows 메모장만도 못한 기능성을 보인다. 클립보드 작업도 업데이트가 필요하다. 현재 Self는 다소 기묘한 모드로 동작해서, 백그라운드에 autocutsel을 실행해 둬야 그나마 제대로 작동한다.

개인적으로는 인터넷 프로젝트 저장소와 의존성 정의를 통한 설치가 큰 돌파구가 될 수 있다고 본다. 다시 말해, 오늘날 Self에서는 소프트웨어 배포가 꽤 어렵다. 패키지 매니저가 큰 도움이 될 것이다.

Klein

한때 Self를 셀프로 부트스트랩(자기 자신으로 구현)하려는 프로젝트가 있었다.

그 잔해는 GitHub에서 찾을 수 있다:

Self 개발을 이어가고 싶은 사람이라면 여기서 시작해 발판을 마련하는 것이 좋을 듯하다.

흥미로운 점은, 이를 디버깅하고 실행 중인 Self 인스턴스와 연결할 수 있었던 점이다.

Korz

Korz는 매우 흥미로운 아이디어다. David Ungar는 Self에 또 하나의 차원을 추가하면 어떻게 보이고 동작할지를 구상했다.

C나 Pascal처럼 함수만을 지원하는 언어는 차원이 하나뿐이다. 함수는 어떤 데이터를 받는다.

객체지향 언어는 함수와 구조를 결합해 차원을 하나 더 추가했다. 함수는 데이터를 받고, 서로 다른 객체들 안에서 서로 다른 의미를 가질 수 있다.

Korz는 ‘세계(world)’라는 차원을 하나 더 추가한다. 그 안에 객체들이 저장된다. Self에서는 객체 이름과 메시지만 지정했지만, Korz에서는 메시지를 보낼 ‘세계’도 지정한다. 세계는 다양할 수 있다. 어떤 세계에는 미러(mirror)나 시스템/디스크 관련 함수가 아예 없어서 샌드박스처럼 동작하기도 한다. 세계는 동적으로 생성·소멸할 수 있고, 객체는 한 세계에만 있거나 동시에 여러 세계에 있을 수도 있다.

물론 객체 안에 객체를 넣는 방식으로도 이를 흉내 낼 수 있지만, 수많은 일을 수동으로 해야 한다. Korz는 이를 가상 머신 수준에서 바로 내장·지원한다.

자세한 내용은 다음 논문에 잘 정리되어 있다:

논문을 구하는 방법을 모르면 Sci-Hub를 이용하라(구글이 알려줄 것이다).

안타깝지만 Korz에 대해 말할 수 있는 것은 이게 전부다. 내가 알기론 오픈 소스가 아니고, 저자는 어디에서도 크게 언급하지 않았으며, 메일링 리스트의 질의에도 응답하지 않았다:

형이상학적 관점에서

“형이상학적”이라는 표현은 과장일 수 있다. 다만 역사적 자료에서 읽히는 Self의 잠재력, 맥락, 비전을 포착하고, 동시에 내가 일부 꿈꾸었던 것을 표현하고자 했다.

Tarraingím

몇 해 전 Self 메일링 리스트 전체 아카이브를 읽다가 지금도 상상력을 자극하는 것을 발견했다. 정보 작업과 프로그램 시각화를 위한 개념 증명(proof of concept) 시스템으로, 이름은 Tarraingím, 줄여서 Tgim이다. James "kjx" Noble이 자신의 학술 작업으로 이를 만들었다.

이 시스템은 우리가 파일을 탐색하듯, 아이콘과 다양한 시각화를 사용해 객체를 표시하고 탐색할 수 있게 했다.

이미지 1 이미지 2

물론 위의 데모에는 한계가 있고, 원래 의도도 프로그래밍 언어 작업 쪽에 더 가까웠다. 그럼에도 개인 위키 스타일의 임의의 정보에 이런 방식을 어떻게 적용할 수 있을지 상상하는 것을 멈출 수가 없다.

Alan Kay의 말처럼:

관점은 IQ 80점의 가치가 있다.

이것은 다양한, 미리 준비된 관점을 제공하는 환경이라는 주제에 관한 흥미로운 실험처럼 보인다.

Engelbart의 MOAD

얼마 전, 아마도 인류 역사상 가장 영향력 있는 컴퓨터 데모의 50주년이 지났다. 바로 Douglas Engelbart의 이른바 “모든 데모의 어머니(MOAD)”다.

자세한 정보는 예를 들어 다음을 참고하라:

이 데모를 모르고 지나쳤다면, 반드시 찾아보길 권한다.

많은 사람에게 Engelbart의 데모는 비전의 구현이다. 그래픽 사용자 인터페이스, 인터넷, 인터랙티브 화상통화 등 오늘날의 기술을 예견한 것으로 칭송된다. 무엇보다 컴퓨터 마우스가 처음 사용된 순간이기도 했다!

겉으로 보기엔 경이로운 성공처럼 보인다. 미래를 이처럼 정확히 예견하고 정의한 사람이 과연 또 있을까?

그러나 정작 Engelbart 본인에게는 어느 정도의 실망이었다. 그 실망은 오늘날까지도 Lisp와 Smalltalk 계열 커뮤니티에서 느껴지곤 한다. 이를 두고 Alan KayBret Victor 같은 이들이 자주 말한다.

체코어 자료로는 예를 들어 다음이 있다:

요컨대, 그의 비전 중 덜 중요한 부분만이 실현되었다는 점이다. 그의 비전은 인간 지능의 증강을 통해 인류의 진보를 최대한 가속하는 데 있었다.

그는 Vannevar BushAs We May Think에서 정의한 것처럼, 컴퓨터를 조수로 활용함으로써 이를 달성하고자 했다. 이를 위해 그는 부트스트래핑 전략, 즉 ‘과정을 개선하는 과정을 개선’하는 접근을 택했다. 구체적 내용은 Augmenting Human Intellect: A Conceptual Framework에 정리되어 있다.

그의 목표는 대중을 위한 직관적 사용자 인터페이스, 즉 컴퓨터를 잘 몰라도 쓸 수 있게 만드는 것이 아니었다. 오히려 정반대였다! 그의 평생 목표는 사람과 컴퓨터의 가능한 한 밀접한 결합이었다.

어설픈 비유를 허락한다면, 그가 의도한 것은 수학과 수학 교육이 다리 같은 구조물을 만들려는 사람에게 하는 역할과 비슷했다. 그가 만든 “개념적 프레임워크”는 사람들에게 사고방식과 능력을 제공해, 오늘날처럼 컴퓨터를 단지 기록·검색 매체로 쓰는 데 그치지 않고, 인간의 마음을 확장하는 도구로 쓰게 해 주려는 것이었다.

그의 구상은, 지적 작업을 하려는 사람이 컴퓨터를 프로그래밍하고 가능한 한 효율적으로 지시하여, 인간과 기계의 경계가 사라지는 폐루프를 형성하는 것이었다.

무슨 뜻인지 감이 안 온다면, 어떤 프로그램을 충분히 오래 써서 조작 자체를 의식하지 않고 마치 생각만으로 컴퓨터와 상호작용하는 듯한 경험을 한 적이 있는지 떠올려 보라. 많은 사람이 자신에게 맞게 끝없이 커스터마이즈해 극도로 효율적으로 쓰는 프로그래머용 에디터에서 이런 모습을 볼 수 있다. 혹은 3D 모델링을 하다 보면, 프로그램 조작이 아닌 모델링 그 자체만을 인식하게 되는 순간이 온다. 게임을 할 때도 사람들이 wasd 키를 누른다는 사실을 잊고, 마치 게임 속에 들어간 것처럼 느끼곤 한다.

Engelbart가 원한 것은 컴퓨터와 정보를 다루기 위한 유사한 시스템이었다. 그래서 그는 NLS(oN-Line System)를 만들었고, 그래서 그의 데모가 지금 봐도 놀랍다. 반면 오늘날의 프로그램들은 그래픽 인터페이스의 패러다임과 ‘최대한 직관적’이려는 목표에 갇혀 그 이상을 이루지 못한다. 설령 어떤 프로그램이 이를 어느 정도 성취하더라도 대개는 고도로 특화되어 있다. 건축 CAD에서 문서를 쓴다거나, 개인 정보 베이스를 만들 수는 없다.

전반적으로 정보 작업은, 제시(프레젠테이션)를 제외하면 사실상 오피스 제품군과 위키 노트 작성으로 축소되어 버렸다.

Self

여기서 Self가 어떻게 연결되는지 궁금할 것이다. 내 생각에, 지금까지 소개한 것만으로도 Self가 내가 아는 어떤 것보다 Engelbart의 생각에 가장 가까운 것으로 느껴진다.

한번 곰곰이 생각해 보자:

  1. 객체 기반 그래픽 인터페이스. 비교적 직관적인 방식으로 조립·분해할 수 있으며, 이를 통해 사용자용 프로그램을 빠르게 구성할 수 있다.
  2. 정보를 다루기 위한 객체들.
  3. 프로그래밍 언어와 전체 환경의 결합. 둘 사이의 경계가 명확하지 않다.
  4. 그로부터 파생되는 모든 항목의 주소 지정 가능성. 곧, 객체들 사이의 메시지로서 무엇이든 호출할 수 있다.

물론 Self는 상당히 낡은 상태이며, 어떤 아이디어는 개략적으로만 제안되었고, 어떤 것들은 1992년쯤 구현된 이후로 손대지 않았다. 이 짧은 데모 스냅샷을 한번 보라:

엔겔바트의 NLS가 제공하는 가능성과 자연스레 비교하게 된다.

Self가 Engelbart가 상상한 바로 그것이라고 주장하려는 것은 아니다. 그러나 내 생각에 그 아이디어 중 상당수는 같은 길을 걸었다. 만약 끝까지 다듬어졌다면, 모든 것이 주소 지정 가능하고 호출 가능한 객체인, 무한히 프로그래밍 가능한 환경이 되었을 것이다. 누구나 자신의 그래픽 애플리케이션을 만들 수 있는 패러다임을 갖춘 그래픽 인터페이스의 환경. 약간의 노력만으로 진정한 ‘사고의 확장’으로 쓸 수 있는 시스템 말이다.

그것은 곱씹어 볼 만한 가치가 있다.

맺음말

이것이 Self에 대해 간단히 말할 수 있는 전부다. 다면체 수정의 몇몇 면, 아이디어의 반짝임, 움직이는 사고 모델에 대한 단상.

비록 프로그래밍 언어, 인터랙티브 환경, 그래픽 프로그래머블 시스템에 대한 내 시각을 바꾸지 않았더라도, 적어도 리플렉션에 대한 내 시각은 완전히 바뀌었다. 이는 요즘 내가 생각하고 작업한 모든 것에 관통한다.

컴퓨터 안에서 만들어지는 것들은 어떤 형태도 될 수 있다. 그런데 우리는 인류 전체가, 아마도 무의식적으로, 그리고 분명히 잘못된 방식으로, 그것들이 될 수 있는 것만큼 ‘동적’이 되지 않기로 결정해 버린 듯하다. Self는 모든 것이 다르게 작동할 수 있음을 보여주었다.

Self에는 아직 거의 아무도 보지 못한 마법이 많이 숨어 있다. 이성을 통해 시각화할 수 있는 비밀들. 그걸 보러 가는 것은 당신에게 달려 있다.

관련 토론