Os 22 anos do JavaScript, contados pelo seu criador, Brendan Eich

Em:

Nesta semana, especificamente no dia 15 de Maio, o JavaScript comemorou o seu 22º aniversário 👏 👏 👏
A nossa linguagem tão querida e amada (tá bom, odiada também :p) já passou da adolescência faz um tempo, e agora está em sua melhor fase!
Muito se sabe da história do JavaScript, mas que tal saber exatamente o que aconteceu nestes 22 anos através do seu criador?

O Brendan Eich fez uma série de posts na rede social Mastodon.social contando tudo, inclusive com detalhes interessantes nunca antes sabidos por este que vos escreve.
Parabéns ao JavaScript!
Viaje conosco nesta incrível história (traduzido dos posts do Brendan)

Introdução

O JS completa 22 anos hoje (15 de Maio de 2017).
Eu comecei a trabalhar na Netscape no dia 4 de abril de 1995, atraído pela jg&mtoy para “fazer scheme no browser”.

Ao entrar, eu descobri (1) que a guerra de headcount no pre-IPO NSCP deixou o time client impossibilitado de me contratar como havia sido planejado, então eu passei a integrar o time server; (2) A Sun estava em negociação com o Netscape (Java deal); ela era vista como o vetor para o seu vírus Java, não se importando com a integração com HTML — mas Bill Joy “sacou isso” e junto com Marc Andressen me ajudou a fazer o “Mocha”.
Depois de um mês trabalhando com server side (onde eu pude trabalhar com os gêmeos McCool e Ari Luotonen), eu mudei para o time client que respondia a Tom Paquin e mergulhei no JS.

No dia 5 de maio, eu comecei por implementar um JS scanner/parser em um dia ou mais, então um interpretador de bytecode (já que o produto Livewire server queria evitar recompilar o código em cada requisição). Eu também escrevi um decompilador (um pouco antes, meu amigo Lars Thomas Hansen que trabalhava na Opera na época, teve uma experiência semelhante).
Eu estava esperando o dia do teste, dia 15 de maio de 1995 e alcancei o objetivo;

O primeiro JS console

Meu demo foi um “JS console” que fazia um post para uma URL JavaScript: <form method='post' action='javascript:…'>.
O primeiro JS console. Após apresentar matemática básica e a função recursiva do Fibonacci, eu tive um problema, no qual eu pude rastrear no gdb e brinquei dizendo que “a culpa é de todo mundo!”, já que o meu código, o netlib do Lou Montulli, o layout engine do Eric Bina e o X front end do Jamie Zawinski estavam todos ligados, lol.
Eu tinha designs no layout code do ebina, mas isso foi parseado muito rápido (modems!), numa estrutura flat display-list-like sem hierárquia.

DOM Level 0, SPAs e Same origin policy e XSS!

Então o “DOM level 0” era bem simples: document.{links,forms,anchors,images} e indexando mais profundamente a partir dali. A capacidade de codificar ações de formulário era ótima.
O construtor Image veio depois, no Netscape 3 — junto com a tag <script> — mas mesmo em NS2 as pessoas poderiam construir “Single Page Applications” (SPAs) via frames/framesets/onclick=javascript: URLs. Foi o máximo. Também bugado e bastante inseguro.
Eu cheguei a conclusão, baseado nos papers de Butler Lampson, que eu precisava de um identificador único: scheme:host:port.

O “same-origin policy” nasceu.
Meu objetivo era restringir o acesso via referência (JS strong ref em GC heap (a pilha do Garbage Collector), equivalente a “capacidade” Object Capability Security) ao same-origin objects, mais umas exceções, tais como outro frame ou window na qual alguém poderia navegar no objeto location.
Eu queria habilitar origins para implementar apps JS nas quais subframes poderiam carregar o conteúdo de origens distintas, mas ainda controlar a navegação do nível mais alto. Isso funcionou de uma forma muito melhor do que eu esperava; também, XSS!

Permissividade no JS

O que me incomoda é que se eu tivesse sido tão restritivo como, por exemplo, CORS, a Web como nós conhecemos não teria se desenvolvido. Deve-se ser liberal no início, conservador com o tempo, até que um kernel evolucionário seja formado e consiga suportar uma especificação desenfreada em cima e embaixo, de acordo com o trabalho de Dovrolis. De qualquer forma, eu optei pela permissividade no JS, de 1995 em diante, especialmente em 1996, no Netscape 3. Esse foi o lançamento, e como Jamie Zawinski atestou, esse foi originalmente o NS2, enquanto o NS3 acabou sendo o NS4 lol.

Um pouco sobre a Netscape

Quando Jamie Zawinski e Terry Weissman ainda estavam trabalhando no Netscape 2.1, eles implementaram o S/MIME com Lisa Repka (minha amiga da MicroUnity). Ao mesmo tempo, pmarca entre outros, calcularam erradamente na compra da start-up de Collabra e deram chaves ao reino do client Netscape. Isto levou o Netscape 2.1 a tornar-se 3 e o Netscape 3 a tornar-se 4 – e no início, funcionava apenas no Windows – e não muito bem, contra o IE4.

Scott Furman (amigo da MicroUnity & Netscape) e eu fomos para o lançamento do IE4 da Microsoft em Gordon Biersch em San Jose em 1997, e nós gostamos da apresentação de Scott Isaacs da MS, mostrando o VML (markup de gráficos vetoriais no IE) e outras acrobacias que ambos tínhamos discutido na Netsacpe, sem ter os meios para implementar – por conta da Netscape estar jogando seu IPO loucamente em startups “enterprise” medíocres como Collabra – e Scott Furman e eu dissemos um ao outro “nós estamos fodidos!”
De lá em diante, foi ladeira a baixo todo o caminho.
As pessoas do primeiro andar da Netscape, fritos pelo lançamento do 1.0 e do 1.1, foram embora ou foram dispensados.

Mozilla, Firefox, Google e Apple!

Grande parte de 1997, eu me concentrei na padronização do JS como “ES1”, ECMA-262 (ver ecma-international.org).
Em junho eu dirigi em um “Turbo Diesel Minibus” alugado de Paris a Nice com a minha colega de marketing, Ang Ng, e seu namorado Jason.
Bons tempos, não muito “Ronin” (o filme) mas próximo o suficiente — nós até mesmo fomos para Eze, a perched Village, acima de Nice e Cap Ferrat. (Eu não fiz RPG em um carro oposto, como o De Niro fez em “Ronin”.)
Depois de padronizar o JS, eu entrei no time inicial da mozilla.org no final de 1997.

Eu sabia naquela época, pelo que o meu colega de cubo Jeff Weinstein me perguntou, que o JS iria morrer rápido ou viver por 20 anos e ser grandioso.
Eu queria ajudar Jamie Zawinski, Lloyd Tabb, Paquin, Michael Toy, e outros para fazer a mozilla.org dar certo. Mesmo assim, como a Microsoft estava matando o Netscape, levando o preço de um navegador para $0 e tomando conta do lado do servidor, nós ao lado da mozilla.org poderíamos prever uma hora em que o código do lado do servidor também custasse 0. Consideramos que o código do cliente construído a um custo de ~$1B seria valioso.

E nós estávamos certos! Firefox.
Ok, depois que fizemos o Firefox e fizemos parceria com a busca do Google, nós sabíamos que Sergey (& Larry) iriam fazer o seu próprio navegador.
Meu último encontro com os dois fundadores do Google foi em 2005. Sergey estava atrasado porque Steve Jobs tinha o chamado para gritar sobre “você não deve caçar David Hyatt!”
Este era o caso do “Tech-topus”, onde se dizia que o Google, a Adobe, a Intel e a Apple concordaram (com restrições no comércio) para evitar o recrutamento do talento de cada um, com salários mais altos. Oops.

O nascimento do Google Chrome

O Hyatt nunca saiu da Apple, então seu nome é redigido nos materiais do Techtopus.
Na última (para mim) reunião em 2005, Larry Page disse que tanto ele como Sergey tinham acabado de ir ao “Space Camp” de Esther Dyson, onde seu tio Freeman Dyson havia dado uma palestra sobre o Projeto Orion. Se você não sabe o que é isso, leia Niven & Pournelle “Footfall”.
Freeman falou sobre o protótipo explosivo químico e o futuro.
Na minha frente, Larry Page disse: “Atualmente tudo é imperfeito!” E bateu na mesa.

Larry comentou sobre o projeto Orion (nuclear bomb impulse-fueled rockets: um grande amortecedor com molas e tecnologia steampunk para absorver o choque) “Devemos fazer isso!”. Eu não posso discordar, embora eu reclame do lançamento atmosférico, mesmo que somente sobre a China do norte.)
Era claro que (a) Sergey e Larry queriam fazer algo grande; (B) eles queriam fazer um navegador, por isso a minha sugestão que eles fizessem o seu próprio baseado no WebKit, como Larry me opoiou no momento. Neste ponto, o dado do Google Chrome foi lançado.

Um brinde para mais 22 anos!

Neste ponto, eu acho que a Mozilla estava condenada – apenas nos primeiros princípios e indução.
Enfim, é interessante que os bilionários do novo aeon são dedicados a viagens espaciais fisicamente realistas. Eu admiro isso. Mais recentemente, eu ouvi que o Larry está ligado no Tri-Alpha Energy (fusão de proton-boro), que ainda pode ser viável. Espero que sim!
Enquanto isso, o JS cresce ao longo de seu caminho evolutivo, favorecido por estar “primeiro” em 1995 e por dois anos enquanto eu trabalhava para padronizá-lo.
Um brinde para mais 22 anos!

Créditos

Este artigo foi traduzido e adaptado para o português.
O texto original com os posts do Brendan Eich estão na rede social Mastodon: https://mastodon.social/@BrendanEich/.
A tradução e o artigo foram previamente autorizados pelo próprio Brendan Eich.

  • Primeiros palestrantes BrazilJS Conf 2016

    Os primeiros palestrantes da BrazilJS Conf 2016 acabam de ser confirmados! Este ano já será a 6º edição do evento. Vamos aos palestrantes: Lea Verou A Lea está atualmente trabalhando em pesquisas com Interação Homem-máquina no MIT. Ela escreveu um livro sobre CSS avançado para O’Reilly CSS Secrets e trabalhou como Developer Advocate na W3C. […]

  • Weekly #196 – Node.js 8, Web.br 2017 e CodeHouse

    Lançamento do Node.js 8, da Web.br 2017 e do CodeHouse, um projeto bem legal para ajudar programadores em hospedagens para eventos.

  • Implementando internacionalização (i18n) com JavaScript

    Então, você está expandindo seu negócio/produto e deseja alcançar mais usuários, que falam diferentes idiomas ou ainda, está trabalhando no desenvolvimento de algo e deseja que essa solução atinja um público elevado de diferentes nacionalidades? Se você respondeu sim para algumas das perguntas, venha conhecer mais sobre o processo conhecido como i18n. Caso a resposta […]

Patrocinadores BrazilJS

Gold

Silver

Bronze

Apoio

BrazilJS® é uma iniciativa NASC.     Hosted by Getup