Como lidar com projetos do no periodo de 2005 a 2013: o que ninguém te conta
O período de 2005 a 2013 é uma zona cinzenta no Brasil digital. Nada tão antigo para ser descartado, mas já obsoleto o suficiente para causar problemas reais. Se você está lidando com código, dados ou arquivos daquele tempo, provavelmente já percebeu que as coisas não funcionam mais do jeito que funcionavam. Eu passei as últimas semanas recuperando sistemas legados de clientes e encontrando exatamente isso. Tabelas de banco de dados com campos em VARCHAR que armazenavam datas no formato DD/MM/YYYY sem validação nenhuma. Arquivos de configuração com endereços IP fixos que hoje estão em ranges completamente diferentes. Scripts batch que dependiam de versões do PHP que já receberam security patch e depois foram descontinuadas.
Migração de bancos de dados do no periodo de 2005 a 2013
O problema mais comum que eu vejo é a migração de MySQL antigo para versões modernas. Um sistema que rodava em MySQL 4.1 ou 5.0 com motor MyISAM simplesmente não vai subir em um servidor atual. O MyISAM morreu como padrão, e o comportamento de COLLATION mudou de forma que querys que funcionavam antes começam a falhar silenciosamente. A abordagem prática que eu uso é a seguinte. Primeiro, faça um dump completo com --set-gtid-purged=OFF e --compatible=mysql40 se o banco for realmente antigo. Depois, rode o dump em um MySQL 5.7 intermediário só para validar a integridade. Só então avance para a versão final. Pule esse passo intermediário e você vai perder horas debugando problemas de character set que aparecem só quando os dados começam a ser consultados.
Um caso específico que eu tive recentemente envolvia uma base de 2008 com mais de 400 tabelas MyISAM e triggers escritas em stored procedures que faziam referência a variáveis de session não declaradas. Quando migrei direto para MySQL 8.0, o servidor nem subia. A solução foi criar um container Docker com MySQL 5.6, converter todas as tabelas para InnoDB lá, aplicar o dump no 5.7 e só então subir no 8.0. Levou cerca de 3 horas no total, incluindo o tempo de conversão das tabelas. O detalhe que muita gente perde: stored procedures daquela época frequentemente usam DELIMITER dentro do próprio corpo do procedimento. Versões mais novas do MySQL tratam isso de forma diferente e o procedimento é criado corrompido. Você precisa remover todos os DELIMITER antes de importar e depois recriar as rotinas manualmente se necessário.
Arquivos e formatos obsoletos
Além dos bancos, existe todo um ecossistema de arquivos que ficou para trás. Flash ainda rodava em 2013 e muitos sistemas internos dependiam dele para relatórios. PDFs gerados com fpdf ou libraries antigas têm estrutura que leitores modernos de PDF reclaman. XMLs com encoding ISO-8859-1 que sistemas atuais esperam ver em UTF-8. Quando eu preciso recuperar conteúdo de arquivos daquele período, o primeiro passo é sempre identificar o encoding real. Ferramentas como file e chardet ajudam, mas o que realmente funciona é abrir o arquivo e verificar se caracteres como ç, ã, é estão corretos ou se estão aparecendo como caracteres estranhos. Se estiverem errados, você converte com iconv ou python com o encoding correto. Fazer essa verificação antes de processar em lote economiza dias de trabalho.
Eu tive um projeto onde precisava extrair dados de planilhas Excel geradas pelo LibreOffice 3.3 em 2009. O formato .ods delas tinha uma estrutura de schema ligeiramente diferente das versões atuais, e o phpoffice tradicional falhava na leitura. A solução foi usar a linha de comando do libreoffice em modo headless para converter para CSV antes de processar. Uma linha de comando simples resolveu o que três bibliotecas diferentes não conseguiram.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Segurança e credenciais abandonadas
Esse é o ponto mais delicado. Sistemas de 2005 a 2013 foram construídos com uma noção de segurança completamente diferente da atual. Senhas em texto plano no banco. Criptografia MD5 para hash de senhas. API keys hardcoded em arquivos de configuração visíveis no repositório. Sessions com timeout de 24 horas ou mais. Não adianta aplicar patch de segurança em código que não existe mais. O que funciona na prática é isolar esses sistemas em redes segregadas, desligar portas que não são usadas e fazer uma avaliação honesta do que pode ser substituído versus o que precisa ser mantido rodando. Eu vejo muitas empresas tentarem manter sistemas legados acessíveis pela internet porque "é muito custoso migrar". Isso é erro clássico. O custo de um breach em sistema desatualizado é muito maior.
Uma coisa prática que eu recomendo: se você precisa manter algum sistema daquele período rodando, pelo menos faça um backup imutável dos dados e documente exatamente o que aquele sistema faz, quais dados ele processa e quem são os usuários. A maioria desses sistemas tem documentação zero e o conhecimento só existe na cabeça de pessoas que já saíram da empresa.
Cronologia prática do que esperar
Para ter uma ideia do terreno, aqui está o que eu considero relevantes sobre o no periodo de 2005 a 2013 no contexto brasileiro: Entre 2005 e 2007, a maioria dos sistemas empresariais ainda usava PHP 4 ou PHP 5.0 inicial. Bancos eram predominantemente MySQL 4.x com MyISAM. Frameworks praticamente inexistentes, código procedural puro espalhado em arquivos incluindo outros arquivos. O padrão de mercado era hospedagem compartilhada com configurações relaxadas de segurança.
De 2008 a 2010, PHP 5.2 se tornou dominante. Migração para InnoDB começou em projetos maiores. ORM como Doctrine 1.x e Propel ganharam tração. AJAX ficou comum e muitas interfaces começaram a depender de JavaScript que hoje não roda mais em navegadores modernos sem adaptação. O Brasil começou a adotar banda larga residencial em escala, o que mudou a arquitetura de muitos sistemas voltados ao consumidor. De 2011 a 2013, PHP 5.3 e 5.4 eram o padrão. Frameworks como Symfony 2 e Laravel 4 começaram a aparecer. MySQL 5.5 se consolidou com InnoDB como padrão. HTML5 e CSS3 ainda eram novidade e muitos sites corporativos continuavam usando layouts em tabelas. A LGPD ainda não existia, então a coleta e armazenamento de dados pessoais tinha poucas restrições.
Se você está começando a lidar com sistemas dessa época, o conselho mais útil que eu posso dar é: não tente modernizar tudo de uma vez. Identifique o que é crítico, isole o resto, e construa uma camada de abstração entre o legado e o novo. Isso evita que uma mudança no sistema atual quebre algo que estáRodando há dez anos sem ninguém lembrar exatamente como funciona.