O que essa mudança significa para as empresas que utilizam fortemente o idioma, especialmente aquelas que podem não estar prontas para migrar?
Em Pycon, em 2014, Guido van Rossum, o criador de Python e, na época, o Ditador Benevolente Para a Vida da Língua, estava no palco com uma camisa que tinha um grande 2.8 escrito sobre ele em letras de bloco, com um grande sinal vermelho sem entrada através dele. "É hora de passar para o Python 3", disse ele, dizendo ao público que eles devem começar a adotar a nova versão do idioma em seus fluxos de trabalho.
Depois de muitos anos de trabalho árduo para esse objetivo dos principais comprometedores, e da comunidade circundante de bibliotecas, Python 2 está finalmente no fim da vida. 1 de janeiro de 2020, de acordo com pythonclock.org, é a data de entrega para o suporte do Python 2.
Para algumas empresas que já fizeram a mudança anos atrás, não será um problema. No entanto, há uma série de empresas que não farão a mudança tão cedo, por uma série de razões.
O que essa mudança significa para as empresas que utilizam fortemente o idioma, especialmente aquelas que podem não estar prontas para migrar? Para entender todo o contexto do que está acontecendo, vamos dar um passeio de volta pela história do Python.
Uma breve história de Python
A ideia por trás do desenvolvimento do Python 3 era implementar uma única grande mudança que se livrasse de um problema legado no Python: renderizar todas as cordas como Unicode nos bastidores. Como Brett Cannon, um dos principais desenvolvedores do Python, escreve:
As pessoas às vezes esquecem a idade do Python; Guido começou a codificar python em dezembro de 1989 e foi lançado pela primeira vez como código aberto em fevereiro de 1991. Isso significa que o próprio Python antecede o primeiro volume do padrão Unicode, que saiu em outubro de 1991. Ao longo dos anos seguintes, os idiomas criados após o Unicode padronizado optaram por basear sua implementação para strings em codificações que pudessem suportar o Unicode.
....
Apoiar o Unicode e o texto de qualquer idioma escrito é importante. Python é uma língua para o mundo, não apenas para as línguas que suportam o alfabeto romano que asCII cobre. É por isso que o Python 3 o torna "Unicode ou busto" quando se trata de texto; ele garante que todo o código Python 3 suportará todos no mundo, quer o desenvolvedor que escreveu o código explicitamente destinado a ele para ele para ele ou não.
Infelizmente, a equipe assumiu que todos fariam a grande troca imediatamente, e fez python 3 incompatível, e definir 2 como um ramo de manutenção. No entanto, muitas pessoas não quiseram mudar, porque, como disse o PEP para a melhoria, oPython 3 foi "uma melhoria relativamente leve no Python 2". Muitas pessoas não trocaram pelo que eles consideravam ser principalmente um inconveniente. Naquela época, a maior diferença era a mudança da instrução de impressão para a sintaxe da função Python, que quebrou muito código.
Como resultado, o Python 2 continuou em desenvolvimento ativo. Em 2019, porém, o Python 3 finalmente (principalmente) tornou-se a versão padrão da linguagem para o novo desenvolvimento python, e muitas empresas e projetos estão usando os principais recursos do Python 3: f-strings, Path, dicas de tipo, asyncio e, claro, renderização Unicode.
Um processo lento de adoção
Foi um longo caminho para chegar à adoção do Python 3 desde que a nova versão principal foi anunciada em 2008. Dustin mostra quanto tempo a adoção levou:
No início, havia uma série de boas razões para não adotar o Python 3: O mais importante, não era retrocompatível com Python 2. Como resultado, as principais bibliotecas hesitaram em se mudar para a plataforma, e em uma profecia autorrealizável, e foi difícil portar o código com a falta de ferramentas de suporte (eventualmente resolvidas com coisas como 2to3 e seis).
O ponto de inflexão para conversão ocorreu em algum momento por volta de 2016 ou mais com o lançamento do Python 3.5, que contou com multiplicação matricial, introdução de asyncio, melhorias de velocidade no OrderedDict, e uma implementação de dicas de tipo que trouxeram alguns recursos estáticos semelhantes à linguagem para Python.
Versões posteriores incluem ainda mais recursos, como a biblioteca Pathlib e a manipulação de f-string. Com essas mudanças, muitas bibliotecas que as pessoas usam (como scikit-learn para aprendizado de máquina) iniciaram suas migrações para Python 3.
À medida que mais e mais dependências começaram a se atualizar, as empresas começaram a se movimentar também.
Então, agora que estamos perto do fim, o que o corte do Python 2 do desenvolvimento significa para o ecossistema de desenvolvedores dependentes dele?
A julgar pelo estado das coisas na internet, você teria pensado que todos completaram suas migrações. Em uma pesquisa da Jetbrains, que faz IDEs como IntelliJ e PyCharm, 75% dos entrevistados individuais indicaram que já migraram. Uma enxurrada de posts no blog mostraram o mesmo. Por exemplo, o Dropbox detalhou sua migração no outono de 2018. O Instagram migrou em 2017. O Facebook começou em 2014. Splunk, a pedido de seus clientes, também o fez recentemente.
No entanto, só porque o Python 2 está chegando ao fim da vida não significa que as empresas vão parar de usá-lo da noite para o dia. Como sabemos que ainda há energia significativa sendo investida no Python 2? Podemos verificar o que está acontecendo diretamente com o PyPI, a biblioteca de pacotes Python. Em 2016, os principais desenvolvedores por trás do PyPI começaram a enviar logs para o BigQuery do Google, para a capacidade de executar SQL contra eles, oque torna muito mais fácil tomar decisões arquitetônicas com base no uso.
Por exemplo, se você quiser ver quais bibliotecas foram baixadas, pela versão Python, nos últimos 30 dias, você pode criar um novo projeto no BigQuery (o primeiro 1 TB consultado por mês é gratuito), e executar:
SELECT
REGEXP_EXTRACT(details.python, r"^([^\.]+\.[^\.]+)") as python_version,
COUNT(*) as download_count,
FROM
TABLE_DATE_RANGE(
[the-psf:pypi.downloads],
DATE_ADD(CURRENT_TIMESTAMP(), -31, "day"),
DATE_ADD(CURRENT_TIMESTAMP(), -1, "day")
)
GROUP BY
python_version,
ORDER BY
download_count DESC
LIMIT 100
Embora o Python 3 tenha sido a versão dominante na comunidade há pelo menos um ano, a última contagem de downloads individuais de pacotes da PyPI mostra que pelo menos 40% de todos os pacotes para setembro de 2019 são 2,7 downloads. É certo que isso é abaixo de 60% no início do ano, mas ainda é significativo, dado que o EOL está a apenas alguns meses de distância.
Em uma base por biblioteca, fica um pouco mais complicado: A maioria dos downloads de Flask são concluídos usando a versão Python 3, mas apenas 26% dos downloads botocore (o AWS SDK para Python) estão usando Python 3.
E, há várias bibliotecas que vão adiar com a migração: Twisted, uma estrutura web, que foi apenas parcialmente portada, e PyPy, um compilador JIT usado com frequência, que manterá a versão 2 por aí indefinidamente.
Fim da vida útil de qualquer determinado software geralmente não significa que o software não está mais disponível. Isso significa que ele não está mais atualizado contra quaisquer vulnerabilidades de segurança ou adicionando quaisquer correções de bugs adicionais. O PEP Python que regula o fim da vida útil (a especificação do idioma) especifica que,
Esta declaração não garante que os lançamentos do bugfix serão feitos regularmente, mas deve permitir que os voluntários que desejam contribuir com bugfixes para python 2.7 e deve satisfazer os fornecedores que ainda têm que suportar o Python 2 para os anos seguintes.
Mas, há muitos riscos com a não atualização para o Python 3 — o mais importante, o risco de perder atualizações de segurança, não tirar proveito de novos recursos, como dicas de tipo e ganhos de velocidade.
Por que a taxa de adoção é tão lenta
Então por que não estamos em uma taxa de adoção mais alta tão perto do prazo?
Em um post de língua na bochecha, eu escrevi que it roda em Java 8. (que é antigo para os padrões atuais)
Java 8 ainda é o ambiente de desenvolvimento dominante,de acordo com o relatório do ecossistema JVM de 2018.
Isso mantém a resposta: a maioria das grandes organizações, fora do ciclo de hype de posts de notícias técnicas, se movem muito mais lentamente do que a imprensa ou blogs gostariam que você pensasse. A maioria dos grandes bancos ainda está executando alguma variação de FORTRAN e COBOL sob as coberturas, por exemplo.
Assim, enquanto muitas empresas estão delineando suas estratégias de migração, apenas a mesma ou maior quantidade permanecerá no Python 2 por um longo tempo. Por que esse é o caso?
Ao ler os relatos de pessoas que já migraram, é fácil de ver: migrar bases de código leva muito tempo,é uma decisão altamente política, e experimenta inércia, mesmo nas empresas que são a mais alta tecnologia, com as melhores intenções.
Por exemplo, para se mudar para Python 3 no Facebook, Jason Fried começou reescrevendo um serviço em 2014. Ao longo do caminho, ele cometeu um monte de erros, mudou um monte de código, e fez um monte de finagling para torná-lo conhecido que as pessoas estavam se mudando para Python 3 no Facebook fazendo coisas como incluir-se em novos treinamentos de desenvolvedores. Ele então se juntou a Łukasz Langa, que havia feito a conversão do Instagram para Python 3:
Em 2016, ele e Langa formaram uma nova equipe no Facebook para pastorear Python dentro da empresa, que eles apelidaram de "O Ministério das Caminhadas Bobas". Porque eles eram "a equipe Python", a "autoridade percebida" que ele mencionou anteriormente funcionou; as pessoas assumiram que poderiam tomar decisões sobre Python no Facebook.
O movimento do Instagram em si levou 10 meses. Dropbox, onde Guido e Langa agora trabalham, levou três anos, e a partir da aposentadoria de Guido há várias semanas,ainda está em andamento. É certo que todas essas são enormes bases de código, mas você tem que se perguntar: se demorar tanto tempo com as pessoas de topo em Python trabalhando nele, quanto tempo levaria para uma empresa regular, talvez uma em que python não é mesmo a linguagem principal?
Em todos os casos, a política desempenhou tão importante um papel quanto a direção técnica.
Segundo, as preocupações com a segurança são um problema. Ironicamente, você assumiria que não atualizar seria o maior risco, mas em organizações maiores, muitas pessoas não podem atualizar o Python sozinhas: o administrador ou a equipe de segurança empurra atualizações para eles. Em alguns casos, downloads pip também não são permitidos. Se o Python 2 é o padrão acordado pela equipe de segurança, pode ser necessário um esforço monumental para convencer as pessoas a fazer a mudança para 3, particularmente em configurações fortemente regulamentadas (como saúde ou finanças), e governo.
Isso nos leva à terceira razão: inércia. Embora muitas versões do Linux, como rHEL, por exemplo, estejam incluindo Python 3 ao lado do Python 2, não é de forma alguma o padrão, e na comutação entre 2 e 3, alguns bugs estão constantemente sendo encontrados, especialmente com ponteiros para versões do sistema de Python, por exemplo, no Debian.
Python passou por um longo caminho para passar de 2 para 3, e indivíduos e startups prospectivas adotaram isso. Agora, a segunda grande migração ocorrerá quando grandes empresas iniciarem suas migrações longe de 2. Em relação ao Python 2, veremos que o número de 40% diminuirá ainda mais em 2020, mas as mudanças serão incrementais, e haverá empresas executando o Python 2.7 bem no futuro.
O Avance Network é uma comunidade fácil de usar que fornece segurança de primeira e não requer muito conhecimento técnico. Com uma conta, você pode proteger sua comunicação e seus dispositivos. O Avance Network não mantém registros de seus dados; portanto, você pode ter certeza de que tudo o que sai do seu dispositivo chega ao outro lado sem inspeção.