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:[email protected]/.
A tradução e o artigo foram previamente autorizados pelo próprio Brendan Eich.

  • Weekly #172 – Webinar React, Mais sobre JS Assíncrono e Clean Code

    A BrazilJS Weekly é a seleção semanal que reúne as novidades sobre o desenvolvimento Web no Brasil e no mundo. Ainda não é inscrito? Faça o seu cadastro e receba nossa Newsletter semanal 😎👊🙂👌👍 Sugira conteúdo para a Weekly usando o nosso canal de issues no Github. Um agradecimento especial aos 16 colaboradores da edição […]

  • Async Await, JS assincronamente síncrono

    O JavaScript tem evoluído muito nestes últimos anos e ainda temos muitas novidades interessantes a caminho! Este artigo é a continuação de uma série onde estamos discutindo as características assíncronas do JavaScript. Confira a lista dos artigos anteriores. As promises são uma daquelas coisas que trouxeram muitas mudanças na forma como trabalhamos com código assíncrono. […]

  • Adeus Flash e um viva aos open standards

    Nesta semana a Adobe anuncinou oficialmente o fim do Flash. No final de 2020 o Flash não será mais atualizado e nem distruibuído.

Patrocinadores BrazilJS

Gold

Silver

Bronze

Apoio

BrazilJS® é uma iniciativa NASC.     Hosted by Getup