본문으로 건너뛰기

Microsoft JScript1

Microsoft는 Visual Basic을 "Visual Basic Script를 사용해서 월드 와이드 웹 기반 애플리케이션을 만드는 표준" [Wingfield 1995]으로 만들 계획임을 발표했다. Netscape와 Sun이 Javascript를 공식적으로 발표한 것과 같은 주였다. Microsoft는 1996년 5월 29일 Internet Explorer 3.0 베타 릴리즈에서 Javascript를 지원한다고 공식적으로 발표했다[Microsoft 1996]. 그 발표 내용은 다음과 같았다.

ActiveX Script Visual Basic® 스크립트와 Javascript에 대한 네이티브 지원을 통해 Microsoft Internet Explorer 3.0은 가장 포괄적이고 언어와 독립적인 스크립트 기능을 제공합니다. REXX, CGI, PERL과 같은 추가적인 스크립팅 언어를 지원하도록 Microsoft Internet Explorer를 확장할 수 있습니다. 웹 페이지 디자이너들은 HTML 코드에 스크립팅 언어를 삽입하여 ActiveX 컨트롤, Java Applet, 기타 소프트웨어 구성 요소들을 연결하고 사용자와 상호 작용하는 페이지를 만들 수 있습니다.

훗날 JScript라고 불리게 될 작업은 1995년 10월 Robert Welland가 Microsoft의 Internet Explorer(IE) 팀에 합류하면서 시작되었다. Welland는 이전에 Apple에서 Newton 휴대용 컴퓨터와 NewtonScript 언어 [Smith 1995]에 대한 작업을 하였다. NewtonScript는 Self 언어에 의해 영향을 받은 프로토타입 기반의 객체 지향 언어였다. Welland는 NewtonScript의 주요 설계자인 Walter Smith와 프로젝트에 컨설턴트로 참여했던 David Ungar와 긴밀하게 협업했었다. 그래서 Welland는 프로토타입 기반 언어에 대한 Ungar의 아이디어와 Self에 매우 익숙했다. Apple을 떠난 후 Welland는 브라우저에 어떻게 스크립팅 기능을 넣을지 고민해 왔다. 이는 Welland가 Internet Explorer에 스크립팅을 넣는 일을 하게 되는 계기가 되었다.

Microsoft에 도착한 Welland는 IE에 Visual Basic을 넣어야 한다는 지시를 받았다. 하지만 그가 Microsoft의 개발자 도구 부서(DevDivg)의 Visual Basic 팀에 문의했을 때 그 작업이 2년이 걸릴 것이라는 답변을 받았다. Welland와 Sam McKelvie는 IE2에서 Visual Basic for Applications2을 실행시키는 작업을 빠르게 진행했지만, 브라우저의 객체 모델과 그걸 통합하기는 너무 복잡했다. Welland는 Netscape 2 공개 베타에서 LiveScript/Javascript를 보고는 Javascript를 위한 간단한 바이트코드 인터프리터를 실험하기 시작했고 McKelvie가 그것을 개선했다. Welland는 DevDiv의 Peter Kukol이 바이트코드를 생성할 수 있는 Javascript 파서3를 작성한 것을 발견했다. Welland와 McKelvie는 그들이 만든 인터프리터와 Kukol의 파서, 그리고 Patrick Dussud가 작성한 가비지 컬렉터를 연결하여 JScript의 기초적인 구조를 만들었다.

Microsoft의 DevDiv는 Microsoft의 모든 프로그래밍 언어와 개발자 도구의 개발을 담당하고 있었다. 그래서 Windows 부서의 IE 팀에서 일하는 Robert Welland와 Sam McKelvie가 새로운 언어 구현의 개발에 관여하는 것은 정치적으로 민감한 문제였다. 또한 IE가 Javascript를 지원해야 하는지에 대한 내부적인 논쟁도 있었다. DevDiv는 스크립팅을 위한 Visual Basic과 애플리케이션을 위한 Java에 집중하고자 했다. 그러나 IE 팀의 목표는 IE3이 Netscape 3와 호환되도록 하는 것이었다. 이를 위해서는 Javascript 지원이 필요했다. Microsoft는 Javascript를 지원해야 한다는 사실이 만족스럽지 않았지만 목표를 위해서는 해야 했다. 스크립팅에 Javascript와 Visual Basic을 지원하는 작업은 IE와 Microsoft 전부가 협력해서 진행하고 스크립팅 언어는 DevDiv가 담당하는 것으로 결정되었다. IE/Windows 팀은 브라우저와 기타 제품에 스크립팅 기능을 통합하는 걸 담당했다.

1996년 1월, Sam McKelvie는 DevDiv로 팀 이동을 했고 Robert Welland는 IE 팀에 남아 있었다. 또한 1월에는 Microsoft Word 팀에서 DevDiv로 옮겨온 Shon Katzenberger가 스크립팅에 관한 작업을 시작하였다. Katzenberger는 인터프리터를 담당하게 되었다. 그리고 Visual Basic 팀의 도움을 받아 해당 인터프리터에서 실행되는 Visual Basic의 스크립팅 언어 방언을 만들었다. 이는 이후 Visual Basic Script 또는 VBS로 알려지게 되었다.

Welland와 McKelvie는 JScript와 VBS 모두를 지원하는 스크립팅 시스템을 임베딩 가능한 컴포넌트로 구성했다. 이는 Active Scripting이라는 이름으로 알려지게 된다. 이 컴포넌트는 1996년 IE3와 Microsoft의 웹 서버 제품인 IIS의 일부로 출시되었다. IIS는 Active Server Pages에 서버사이드 스크립팅 기술을 제공했다. Active Scripting은 이후 Microsoft Windows의 표준 구성 요소가 되었고 2019년까지 여전히 사용 가능했다. 레거시 애플리케이션 지원을 위해서였다.

IE 팀은 Netscape와의 경쟁에 매우 집중하였다. 그들은 Active Scripting의 기능이었던 스크립트 디버거가 Javascript 웹 개발자들을 끌어들일 것으로 기대했다. Netscape에는 Javascript 디버거가 없었기 때문이다. 하지만 그들은 또한 IE가 받아들여지려면 Netscape 브라우저의 웹사이트와 상호 호환되어야만 한다는 것을 이해하고 있었다. Shon Katzenberger 등의 사람들은 Javascript를 사용하는 수천 개의 웹사이트에서 IE3의 개발 버전을 실행하고 Netscape 2, Netscape 3의 결과와 비교하였다. 차이점을 발견할 때마다 Katzenberger는 무엇이 어떻게 다르게 동작하는지를 이해하기 위해 Netscape Javascript 동작을 리버스 엔지니어링했다. 그들은 Netscape Javascript의 몇몇 동작들에 크게 놀랐다. 당시 Netscape의 구현에서는 HTML 프레임들이 공통 객체 주소 공간을 공유하고 객체들을 자유롭게 공유할 수 있었는데, 그들은 여기에 특히 놀랐다. IE는 각각의 프레임을 고립된 환경으로 구현했으며 객체들이 그들 간에 전달될 수 있도록 하려면 상당히 많은 재설계가 필요했다.

JScript의 개발 과정 동안, 적절한 언어 명세의 부재는 늘 문제였다. Welland가 회상한 바에 따르면, Thomas Reardon은 언제나 Javascript 언어 명세가 없는 것을 불평하며 Netscape를 비난했다고 한다. Thomas Reardon은 IE3 개발 전반을 주도했던 사람이다.

Footnotes

  1. 이 섹션의 대부분 자료는 2018년 3월 22일에 Allen Wirfs-Brock이 Robert Welland, Shon Katzenberger, Peter Kukol과 진행한 인터뷰 기록을 바탕으로 작성되었다 [Welland et al. 2018].

  2. Visual Basic for Applications는 Visual Basic 6의 변종으로 Microsoft 오피스 어플리케이션에 포함되었다.

  3. 2018년 인터뷰 당시 Kukol은 자기가 최근에 Microsoft의 Javascript 팀에 방문했는데 그가 작성했던 파서 원본이 확장들과 함께 Microsoft의 그 시점 Javascript 구현과 여전히 사용되고 있는 것을 보았다고 이야기했다.