☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

sexta-feira, 21 de janeiro de 2022

COBOL : Muito Além do PIC S9(7)V99 COMP-3

 

Bellacosa Mainframe analisa as variaveis estilo cobol

☕ Um Café no Bellacosa Mainframe

Muito Além do PIC S9(7)V99 COMP-3

O Que Todo Programador COBOL Padawan Precisa Saber Sobre a Anatomia de uma Variável, Como o IBM Z Enxerga Seus Dados e Por Que Essa Sintaxe Continua Dominando o Mundo Financeiro

"Qual é a variável mais importante do COBOL?"

A maioria dos programadores iniciantes responde algo como:

"WS-NOME."

Ou talvez:

"WS-SALARIO."

Mas essa pergunta possui uma resposta muito mais interessante.

A variável mais importante do COBOL não é uma variável específica.

É o conceito por trás de todas elas.

Uma simples declaração como esta:

05 WS-MONTANTE PIC S9(7)V99 COMP-3.

parece pequena.

São apenas alguns caracteres.

Entretanto, essa única linha descreve muito mais informações do que praticamente qualquer linguagem moderna consegue expressar de forma tão compacta.

Ela informa ao compilador:

  • onde o dado pertence;

  • qual seu significado;

  • como será armazenado;

  • como será processado pela CPU;

  • quanto espaço ocupará;

  • se aceita números negativos;

  • onde está a posição decimal;

  • como será gravado em disco;

  • como será enviado ao DB2;

  • como participará das operações matemáticas.

Em outras palavras...

Ela descreve completamente a vida daquele dado.

Hoje vamos abrir essa declaração como um engenheiro desmonta um motor Rolls-Royce.

Pegue seu café.

Vamos viajar para dentro da memória do IBM Z.


Bellacosa Mainframe e a anatomia de uma variavel

COBOL pensa diferente

Quem vem de Java, Python, C# ou JavaScript costuma enxergar uma variável assim:

double salario;

ou

salario = 1500.50

Pronto.

Acabou.

Mas o COBOL nasceu em uma época completamente diferente.

Na década de 60 memória era absurdamente cara.

Processadores eram lentos.

Discos eram pequenos.

Cada byte economizado representava milhares de dólares.

Por isso o COBOL não pergunta apenas:

"Que tipo de variável é essa?"

Ele pergunta:

"Como exatamente esse dado existirá dentro do computador?"

Essa filosofia mudou toda a arquitetura da linguagem.


Primeiro elemento: o nível

05 WS-MONTANTE ...

O número 05 não possui absolutamente nenhuma relação com tamanho.

Ele representa hierarquia.

Imagine um organograma de uma empresa.

Empresa

    Financeiro

        Contabilidade

            Funcionários

O COBOL organiza dados exatamente assim.

Exemplo:

01 CLIENTE.

   05 DADOS-PESSOAIS.

      10 NOME.

      10 CPF.

   05 DADOS-FINANCEIROS.

      10 LIMITE.

      10 SALDO.

Visualmente:

CLIENTE
│
├── DADOS-PESSOAIS
│      ├── NOME
│      └── CPF
│
└── DADOS-FINANCEIROS
       ├── LIMITE
       └── SALDO

Percebe?

O COBOL constrói verdadeiras árvores de dados.

É uma linguagem extremamente orientada à estrutura.

Muito antes de XML.

Muito antes de JSON.

Muito antes de objetos.


O nome importa muito

Observe:

WS-MONTANTE

Isso não é apenas um identificador.

É documentação.

Durante décadas milhares de desenvolvedores trabalharam simultaneamente no mesmo sistema.

Ninguém tinha IDE colorida.

Não existia autocomplete.

Então surgiram convenções.

Por exemplo:

WS-

significa:

Working-Storage

Já:

LS-

é Local Storage.

LK-

Linkage.

SQL-

variáveis utilizadas pelo DB2.

DFH-

estruturas do CICS.

Quando você vê um nome começando por WS-, imediatamente sabe onde aquela variável foi declarada.

Isso aumenta muito a legibilidade.


O verdadeiro coração da declaração

Chegamos ao famoso:

PIC

PIC significa:

Picture

Muitos imaginam que ele define apenas o tamanho.

Não.

Ele descreve a forma como o dado será representado.

É quase um DNA.

Vamos ver alguns exemplos.

Texto:

PIC X(30)

Trinta caracteres.

Somente letras:

PIC A(20)

Numérico:

PIC 9(8)

Numérico com casas decimais:

PIC 9(7)V99

Editado para impressão:

PIC $$$,$$9.99

Cada Picture possui uma finalidade diferente.


O significado do "9"

Na nossa variável aparece:

9(7)

O nove significa:

um dígito decimal.

Logo:

9

aceita:

0 até 9

Enquanto

99

aceita

00 até 99

9(7)

é apenas uma forma elegante de escrever:

9999999

Ou seja:

sete dígitos.

Nada mais.

Nada menos.


O misterioso S

Agora observe:

S9(7)

O "S" significa:

Signed.

Número com sinal.

Sem ele:

0
até

9999999

Com ele:

-9999999

até

+9999999

Mas aqui existe uma curiosidade interessante.

O sinal normalmente não ocupa um byte inteiro.

No formato COMP-3 ele é armazenado dentro do último nibble do número.

Uma solução extremamente elegante criada quando memória era um recurso precioso.


A genialidade da vírgula invisível

Agora chegamos ao personagem mais incompreendido do COBOL.

A letra:

V

A maioria dos iniciantes acredita que ela representa uma vírgula.

Na realidade...

Ela representa a posição lógica da vírgula.

A vírgula nunca é gravada.

Nunca.

Suponha:

PIC 9(5)V99

Na memória teremos:

1234567

Mas o COBOL interpreta como:

12345,67

Onde foi parar a vírgula?

Ela nunca existiu.

O compilador apenas sabe que, ao interpretar aquele número, deve considerar duas casas decimais.

Parece um detalhe.

Mas imagine milhões de registros.

Economizar um byte em cada registro significava reduzir discos inteiros.


A importância da precisão

Vamos comparar.

Python:

0.1 + 0.2

Resultado:

0.30000000000000004

Não é erro do Python.

É matemática binária.

Agora veja o COBOL usando Packed Decimal.

0.10

+

0.20

=

0.30

Sempre.

Sem aproximações.

Sem surpresas.

Sem arredondamentos inesperados.

É exatamente por isso que bancos utilizam COMP-3 há décadas.

Dinheiro exige precisão absoluta.


O que é COMP-3?

Agora chegamos ao astro da declaração.

COMP-3

Também conhecido como:

Packed Decimal.

BCD.

Decimal Empacotado.

Ao contrário do DISPLAY, onde cada dígito ocupa um byte inteiro, o COMP-3 armazena dois dígitos por byte.

Cada dígito utiliza apenas quatro bits.

Ou seja:

12

cabe em um único byte.

Muito mais eficiente.


Como o número fica na memória?

Suponha:

123456789

Em DISPLAY:

F1 F2 F3 F4 F5 F6 F7 F8 F9

Nove bytes.

No COMP-3:

12 34 56 78 9C

Cinco bytes.

O "C" representa positivo.

Se fosse negativo:

9D

Essa codificação ainda hoje é utilizada por praticamente todos os grandes bancos do planeta.


Quantos bytes essa variável ocupa?

Existe uma fórmula famosa.

(dígitos + 2) / 2

Arredondando para cima.

Nossa variável possui:

7

+

2

=

9 dígitos

Logo:

(9 + 2) / 2

=

5 bytes

Apenas cinco bytes.


Parece pouco?

Imagine um cadastro contendo:

300 milhões

de clientes.

Economizar quatro bytes por registro significa aproximadamente:

1,2 GB

Apenas em um campo.

Agora multiplique isso por centenas de campos.

Depois por milhares de tabelas.

Depois por backups.

Depois por replicações.

Agora você entende por que arquitetos de mainframe pensam diferente.


O compilador faz muito mais do que imaginamos

Quando escrevemos:

05 WS-MONTANTE PIC S9(7)V99 COMP-3.

Nós enxergamos apenas texto.

O compilador enxerga uma enorme quantidade de metadados.

Ele sabe:

✔ É numérico.

✔ É decimal.

✔ Possui sinal.

✔ Tem duas casas decimais.

✔ Ocupa cinco bytes.

✔ Pode participar de operações aritméticas.

✔ Será armazenado em Packed Decimal.

✔ É compatível com DECIMAL do DB2.

✔ Pode ser usado em comandos ADD, SUBTRACT, MULTIPLY e COMPUTE.

Tudo isso antes mesmo do programa começar a executar.


Por que DB2 gosta tanto de COMP-3?

Observe esta coluna SQL.

SALDO DECIMAL(9,2)

Em COBOL normalmente teremos:

PIC S9(7)V99 COMP-3

Os dois formatos representam exatamente o mesmo conceito.

Resultado?

Conversões mínimas.

Mais velocidade.

Menor consumo de CPU.

Menor custo operacional.


VSAM, IMS e CICS também entendem esse formato

Quando um programa COBOL grava um registro VSAM contendo COMP-3, os números são gravados exatamente nesse formato empacotado.

Quando outro programa COBOL lê esse registro, nenhuma conversão é necessária.

Tudo continua extremamente eficiente.

Por isso sistemas desenvolvidos há quarenta anos continuam rápidos até hoje.


O preço dessa eficiência

Existe um lado curioso.

Abra um arquivo contendo COMP-3 em um editor hexadecimal.

Você verá algo parecido com:

12 34 56 7C

Não parece um número.

Porque não é texto.

É uma representação física otimizada.

Por isso ferramentas modernas precisam converter esses bytes antes de exibi-los.


E quando falamos em APIs REST?

Hoje muitas aplicações COBOL conversam com Java, Python, Node.js e microsserviços.

Entretanto JSON não entende Packed Decimal.

Então ocorre uma conversão.

Internamente:

12 34 56 7C

Externamente:

{
  "saldo": 12345.67
}

É exatamente esse trabalho que tecnologias como IBM z/OS Connect, CICS Web Services e diversos frameworks de integração realizam.

Eles traduzem o universo do IBM Z para um formato compreendido pelas aplicações modernas, preservando a precisão decimal do COBOL.


Uma lição para o Programador Padawan

Talvez você esteja pensando:

"Tudo isso para declarar uma variável?"

Exatamente.

Essa é a beleza do COBOL.

Em linguagens modernas, muitas decisões ficam escondidas dentro da máquina virtual, do compilador ou da biblioteca de execução.

No COBOL, elas são explícitas.

O programador descreve com precisão quase cirúrgica como seus dados devem existir.

Essa filosofia nasceu da necessidade, mas transformou-se em uma das maiores virtudes da linguagem.

Não é por acaso que os maiores bancos, seguradoras, bolsas de valores e órgãos governamentais do mundo continuam confiando no IBM Z para processar trilhões de dólares diariamente.

Quando um PIX é liquidado, um cartão é autorizado, um financiamento é calculado ou uma aposentadoria é paga, há uma grande chance de que, em algum ponto dessa jornada, exista uma variável muito parecida com a nossa velha conhecida:

05 WS-MONTANTE PIC S9(7)V99 COMP-3.

Ela pode parecer simples.

Mas dentro dela vivem mais de seis décadas de engenharia, otimização, compatibilidade e confiabilidade.

E talvez essa seja a maior lição para todo Programador Padawan: no universo do Mainframe, uma linha de código raramente faz apenas uma coisa. Cada declaração carrega décadas de experiência acumulada, decisões arquiteturais cuidadosamente pensadas e um compromisso absoluto com precisão, desempenho e estabilidade. Aprender a "ler" uma variável COBOL é aprender a enxergar a lógica invisível que sustenta alguns dos sistemas mais críticos do planeta. Quando você dominar essa linguagem dos dados, deixará de apenas escrever programas e passará a compreender como o IBM Z realmente pensa.

quinta-feira, 20 de janeiro de 2022

Do Java ao COBOL no IBM Z : Um Guia para Quem Descobriu que o Mainframe Não é um Museu. É uma Usina de Software.

 

Bellacosa Mainframe do java ao cobol no ibm z

☕ Um Café no Bellacosa Mainframe

Do Java ao COBOL no IBM Z

Um Guia para Quem Descobriu que o Mainframe Não é um Museu. É uma Usina de Software.

"Você não está abandonando Java para aprender COBOL. Está adicionando quarenta anos de engenharia de software à sua caixa de ferramentas."

Existe uma pergunta que recebo com frequência:

"Sou desenvolvedor Java em Windows ou Linux. É muito difícil aprender COBOL no Mainframe?"

Minha resposta costuma surpreender.

Não.

Na verdade, o maior obstáculo não é aprender COBOL.

É abandonar alguns preconceitos.

Durante muitos anos criou-se a falsa ideia de que Mainframe é tecnologia antiga, difícil, cheia de telas verdes e comandos misteriosos.

Depois de alguns dias estudando IBM Z, quase todo desenvolvedor Java percebe algo interessante:

o que muda não é a programação. Muda o ambiente.

A lógica continua sendo lógica.

Algoritmos continuam sendo algoritmos.

Arquitetura continua sendo arquitetura.

Boas práticas continuam sendo boas práticas.

O IBM Z apenas resolveu muitos problemas décadas antes do restante da indústria.

Vamos fazer essa jornada juntos.


Bellacosa Mainframe e um de para entre java e cobol no zos


Primeiro: você já sabe muito mais do que imagina

Imagine um desenvolvedor Java com alguns anos de experiência.

Ele conhece:

  • orientação a objetos

  • APIs REST

  • SQL

  • Git

  • Maven ou Gradle

  • testes

  • logs

  • tratamento de exceções

  • arquitetura em camadas

  • CI/CD

Agora imagine alguém dizendo:

"Você terá que aprender COBOL do zero."

Na realidade...

não será do zero.

Será apenas uma nova linguagem.

O conhecimento de engenharia de software continua válido.


O choque cultural

A primeira diferença não é técnica.

É cultural.

No mundo Java normalmente pensamos em:

  • servidor

  • aplicação

  • container

  • microserviço

  • JVM

  • deploy

No Mainframe pensamos em:

  • sistema

  • aplicação corporativa

  • região CICS

  • Batch

  • JES2

  • Db2

  • IMS

  • filas MQ

  • datasets

Perceba uma coisa curiosa.

Os conceitos são muito parecidos.

Os nomes mudam.


Java e COBOL possuem muito mais semelhanças do que diferenças

Muita gente imagina que COBOL seja uma linguagem "primitiva".

Não é.

Ela apenas nasceu para resolver problemas diferentes.

Observe.

Java

if(saldo > valor){
    sacar();
}

COBOL

IF SALDO > VALOR
    PERFORM SACAR
END-IF

A lógica é exatamente a mesma.


Java

while(true){
   processar();
}

COBOL

PERFORM UNTIL FIM
    PERFORM PROCESSAR
END-PERFORM

Mesmo conceito.

Outra sintaxe.


Java

switch(tipo)

COBOL

EVALUATE TIPO

Outra sintaxe.

Mesmo problema.


Classes versus Programas

Java organiza tudo em classes.

COBOL organiza em programas.

No fundo ambos encapsulam responsabilidades.

Java

ClienteService

COBOL

CADCLI01

Java

PagamentoService

COBOL

PGMPAG01

A única diferença é que no Mainframe normalmente seguimos padrões rígidos de nomenclatura.


Métodos e PERFORM

No Java criamos métodos.

calcularTotal();

Em COBOL usamos parágrafos.

PERFORM CALCULAR-TOTAL

O conceito é idêntico.

Dividir problemas pequenos.


Variáveis

Java

String
int
long
double

COBOL

PIC X
PIC 9
COMP
COMP-3
COMP-5

Aqui existe uma novidade.

O COBOL descreve exatamente como o dado será armazenado.

Isso permite enorme eficiência.


Objetos versus Registros

Java

class Cliente

COBOL

01 CLIENTE.
   05 NOME.
   05 CPF.

Um registro COBOL lembra bastante um DTO.

Ou um Record.

Ou um POJO.


Banco de Dados

Java

JDBC
Hibernate
JPA

Mainframe

Embedded SQL
Db2

Exemplo Java

PreparedStatement

COBOL

EXEC SQL
SELECT ...
END-EXEC

Novamente...

Mesmo conceito.

Outra sintaxe.


Logs

Java

Log4J
SLF4J

Mainframe

DISPLAY
CEEMSG
SYSOUT
JESMSGLG

Toda aplicação precisa registrar informações.


Exceptions

Java

try
catch

COBOL

SQLCODE

RESP

FILE STATUS

RETURN CODE

No Mainframe verificamos códigos de retorno constantemente.

O tratamento é extremamente disciplinado.


Threads

Java possui múltiplas threads.

COBOL tradicional trabalha normalmente de forma sequencial.

Isso não significa menor desempenho.

O IBM Z resolve paralelismo em níveis diferentes.

Milhares de tarefas executam simultaneamente.


Garbage Collector

Java possui Garbage Collection.

COBOL normalmente trabalha com memória previamente definida.

Isso torna o consumo extremamente previsível.

É uma das razões pelas quais aplicações processam milhões de transações diariamente.


Build

Java

Maven
Gradle

Mainframe

JCL
Compilador COBOL
Binder
Link Edit

Aqui começa uma grande mudança.

No Mainframe o processo de compilação é extremamente controlado.


Git continua sendo Git

Hoje praticamente todas as empresas utilizam Git também para COBOL.

Além disso aparecem ferramentas como:

  • IBM Dependency Based Build

  • GitHub

  • GitLab

  • Jenkins

  • UrbanCode

  • Azure DevOps

Mainframe moderno também faz DevOps.


O terminal assusta... durante dois dias

Todo programador Java olha pela primeira vez para o TSO/ISPF e pensa:

"Meu Deus..."

Depois de uma semana.

"Até que é rápido."

Depois de um mês.

"Por que outras ferramentas fazem tantas animações?"

O ISPF privilegia produtividade.

Não aparência.


O que realmente precisa aprender

A linguagem COBOL representa apenas uma parte da jornada.

Na verdade eu dividiria o aprendizado em quatro pilares.


Pilar 1 — COBOL

Aprenda profundamente:

  • DATA DIVISION

  • PROCEDURE DIVISION

  • FILE SECTION

  • Working-Storage

  • Local-Storage

  • COMP

  • COMP-3

  • OCCURS

  • REDEFINES

  • PERFORM

  • EVALUATE

  • SEARCH

  • SEARCH ALL

  • STRING

  • UNSTRING

  • INSPECT

  • SORT

  • MERGE

  • Embedded SQL

  • JSON PARSE

  • JSON GENERATE

  • XML PARSE

Treine escrevendo muitos programas.

Não apenas lendo.


Pilar 2 — z/OS

Depois venha para o sistema operacional.

Aprenda:

  • datasets

  • PDS

  • PDSE

  • VSAM

  • catálogo

  • TSO

  • ISPF

  • SDSF

  • JES2

  • spool

  • JOB

  • STEP

  • PROC

  • utilities

Aqui muitos iniciantes travam.

Porque tentam aprender tudo de uma vez.

Não faça isso.

Aprenda um comando por dia.


Pilar 3 — JCL

Muitos dizem:

"O JCL é difícil."

Discordo.

Ele é apenas declarativo.

Você descreve o trabalho.

Depois o sistema executa.

Aprenda:

  • JOB

  • EXEC

  • DD

  • PROC

  • IF/THEN

  • COND

  • GDG

  • símbolos

  • parâmetros

Depois pratique.

Muito.


Pilar 4 — Ecossistema

Agora sim.

Você entra no universo IBM Z.

Aprenda gradualmente:

  • Db2

  • VSAM

  • CICS

  • MQ

  • RACF

  • REXX

  • DFSORT

  • IDCAMS

  • IEBGENER

  • IKJEFT01

  • FTP

  • Connect:Direct

  • z/OS Connect

  • APIs REST

Esse conjunto forma um desenvolvedor Mainframe completo.


Uma trilha prática de transição

Semana 1

Aprenda:

  • arquitetura IBM Z

  • conceitos de Batch

  • datasets

  • TSO

  • ISPF

Treino

  • navegar

  • editar arquivos

  • copiar membros


Semana 2

COBOL básico.

Treino

  • Hello World

  • cálculos

  • IF

  • PERFORM

  • tabelas

Escreva pelo menos vinte programas.


Semana 3

Arquivos.

Treino

  • Sequential

  • VSAM

  • leitura

  • gravação

  • atualização


Semana 4

JCL.

Compile programas.

Execute Jobs.

Leia mensagens.

Aprenda a interpretar:

  • CC 0000

  • S806

  • S0C7

  • S0C4

Esses erros serão seus professores.


Semana 5

Db2.

Treine:

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • CURSOR


Semana 6

CICS.

Aprenda:

  • transações

  • COMMAREA

  • MAPS

  • BMS

  • SEND

  • RECEIVE


Semana 7

Utilities.

Treine:

  • SORT

  • IDCAMS

  • IEBGENER

Você economizará horas de trabalho.


Semana 8

Integração.

Crie uma aplicação completa.

Batch.

Online.

Db2.

Arquivos.

MQ.

REST.

É nesse momento que tudo faz sentido.


Como treinar de verdade

A melhor forma de aprender Mainframe não é assistir vídeos.

É resolver problemas.

Crie desafios como:

  • cadastro de clientes

  • contas bancárias

  • folha de pagamento

  • estoque

  • faturamento

  • cartões

  • PIX

  • boletos

Depois evolua.

Adicione:

  • Db2

  • VSAM

  • Batch

  • CICS

  • APIs

Cada projeto ensinará dezenas de conceitos simultaneamente.


O erro mais comum

O programador Java costuma perguntar:

"Qual framework devo aprender primeiro?"

No Mainframe a pergunta correta é:

"Como funciona o sistema?"

Quando você entende o IBM Z, aprender novas tecnologias torna-se muito mais fácil.


O que surpreende quem chega ao Mainframe

Depois de alguns meses, quase todos comentam as mesmas coisas.

  • A estabilidade impressiona.

  • O desempenho é extraordinário.

  • O consumo de recursos é mínimo.

  • O controle operacional é excelente.

  • Os logs são detalhados.

  • A segurança é levada muito a sério.

  • O ambiente é extremamente previsível.

Você começa a perceber que muitas "novidades" do mercado já existiam no Mainframe, apenas com outros nomes.


O futuro pertence aos profissionais híbridos

O mercado não procura apenas especialistas em Java ou apenas especialistas em COBOL.

Ele procura profissionais capazes de conectar os dois mundos.

Quem entende:

  • Java

  • COBOL

  • APIs

  • Db2

  • MQ

  • Cloud

  • Git

  • DevOps

  • IBM Z

possui uma combinação rara e extremamente valorizada.

A modernização das aplicações corporativas depende justamente dessa ponte entre plataformas.


A filosofia Bellacosa Mainframe

Sempre digo aos meus alunos que aprender Mainframe é semelhante ao treinamento de um Padawan.

No início tudo parece estranho: a tela 3270, o TSO, o JCL, os datasets, o COBOL com sua sintaxe descritiva. Aos poucos, porém, você percebe que cada ferramenta existe por uma razão e que décadas de evolução produziram um ambiente sólido, eficiente e incrivelmente confiável.

Não tenha pressa para decorar comandos. Entenda os conceitos. Escreva código todos os dias. Leia mensagens de erro. Compile, execute, corrija, teste novamente. Cada programa, cada JCL e cada SQL ampliam sua compreensão do ecossistema IBM Z.

Lembre-se: você não está deixando o universo Java para trás. Está expandindo seus horizontes. Um bom desenvolvedor Java já domina lógica, algoritmos, modelagem, bancos de dados e práticas modernas de desenvolvimento. Tudo isso continuará sendo útil no Mainframe.

O IBM Z precisa justamente de profissionais curiosos, capazes de unir a robustez do legado à inovação das APIs, do DevOps, da nuvem híbrida e da inteligência artificial.

E quando esse dia chegar, você descobrirá que COBOL nunca foi o destino final.

Era apenas a porta de entrada para um dos ecossistemas de computação mais sofisticados já construídos.

Bem-vindo ao IBM Z. Sua jornada como Padawan Mainframe está apenas começando.

 

quarta-feira, 19 de janeiro de 2022

💀💀💀 Zalgo uma pequena sabotagem na biblioteca FAKER.Js 💀💀💀

 


Bellacosa Mainframe e o virus Zalgo assuntando o mundo JS

Risco de Software? Sabotagem em código: Estudo do Caso Zalgo

Salve jovem padawan, hoje vamos comentar sobre um acontecimento quente que ocorreu nos últimos dias, mais precisamente por volta de 10 de janeiro, algo que nos faz parar, avaliar, analisar e pensar em todo o enredo.

No alt text provided for this image

Calma que explicarei, bombasticamente aconteceu uma alteração no código fonte de duas famosas bibliotecas em JavaScript, utilizada por milhares de desenvolvedores no mundo afora. Coisas de software livre e comunidade colaborativa.

Num primeiro momento foi uma sabotagem no código fonte, que gerou comportamento errático e anômalo em ambas as bibliotecas, que causou comoção na comunidade.

O que aconteceu na faker.js e colors.js?

No começo do ano vários desenvolvedores notaram uma situação anômala, semelhante há um vírus no funcionamento destas bibliotecas, que no decorrer da sua execução apresentavam uma mensagem no console, seguida de uma série de caracteres estranhos.

LIBERTY LIBERTY LIBERTY

No alt text provided for this image

Liberdade Liberdade Liberdade.

No alt text provided for this image

Inúmeros programas foram retirados de produção e backups foram utilizados para restaurar a versão anterior, deixando gerentes de TI e equipes muitíssimas preocupadas, seria apenas isso, ou existiria algum backdoor ou outra rotina maliciosa dentro das bibliotecas?

Por vias das dúvidas, os programas ficaram em quarentena, enquanto os especialistas em segurança avaliavam a ameaça e elaboravam relatórios de segurança.

O que é Faker.Js ?

É uma biblioteca utilizada para mockar dados em back-end utilizada especificamente para teste em apis, testes de carga e funcionamento de workflows com uma massiva criação de dados fake.

Podendo ser utilizado via instalação NPM ou Yarm, mas também referenciada em páginas HTML sendo muito útil para os desenvolvedores

O que é Colors.js?

É uma biblioteca de cores utilizada para front-end auxiliando o desenvolvimento de pagina parametrizando códigos de cores em CSS, HTML e aplicativos.

A história por trás do caos

Em teoria não existe nenhum risco nas Bibliotecas, os analistas de segurança correram a verificar e recomendaram a não utilização, pois a credibilidade ficou abalada, porem segundo algumas fontes não ocorreu nenhuma invasão ou ataque de crackers.

A princípio a comunidade DEV creditou a cyberpiratas ou mesmo trolls, que poderiam usar uma quebra de senha e infiltrando-se na comunidade para inserir vírus, worms, trojans e outros malwares num código amplamente utilizado por milhões de programadores em milhares de empresas.

Mas na verdade foi um ato de anarquia digital, onde o próprio autor fez um manifesto de revolta e honrou a memória de uma vítima dos abusos policial, sendo vítima de um golpe kafkiano.

Investigando o fonte

Uma análise no código de ambas as bilbiotecas encontrou uma explicação no arquivo README.TXT do projeto, estava uma questão: o que realmente aconteceu com Aaron Swartz?”

https://github.com/Marak/faker.js

O grande Aaron Swartz

No alt text provided for this image

Estou me referindo ao grande programador e hackativista pro-SOPA, em vida participou ativamente em diversos projetos open-source, auxiliou na criação e melhorias no RSS, no markdown.

Acabou sendo vítima de uma armadilha do FBI e acabou sendo processado correndo o risco de pegar até 30 anos de cadeia, mas devido as suas habilidades como programador, queriam agenciar seu trabalho e faze-lo renegar o seu ativismo, levando-o para o lado negro da força, sendo que se aceitasse comutaria sua pena de prisão para apenas 6 meses.

Declarando-se inocente, não aceitou o acordo com a promotoria e como último ato nesta tragédia tirou a própria vida, enforcando-se no dia 11-01-2013, mas não vendendo-se.

O principal suspeito

Após análises preliminares foi constatado que não houve invasão e o código estava seguro, sendo que o autor da pichação virtual foi Marak Squires, o responsável pelo código malicioso, sendo que ele é o autor de ambas as bibliotecas.

O ato e a tragédia

Afinal o Zalgo não causou danos a ninguém, apenas assustou a comunidade pegando as empresas de segurança de software de surpresa, afinal o uso de bibliotecas de terceiros é um furo de segurança.

Podendo ser explorado por crackers para no futuro usa-las como cavalos de troia e adentrarem CPDs de empresas importantes.

A princípio as políticas de segurança devem ser revistas e todo software open-source devem ser utilizados com atenção.

O que é zalgo?

Hoje apresentei inúmeros termos novos, vamos explorar um outro termo, comum na Deep Web, Zalgo, também conhecido como Z'algatoth, originalmente era um meme oriundo do site de discussão e compartilhamento de imagens Something Awful criado pelo usuário Shmork pseudônimo de Dave Kelly), que acabou se tornando um personagem significativo dentre a comunidade de creepypastas e migrou para inúmeras redes sociais.

Cyber protestos

A cada dia surge uma nova maneira dos cyberativistas se pronunciarem e compartilhar com toda a comunidade seu ponto de vista e lançar memória de uma grande pessoa vítima do sistema, Swartz foi um gênio e imagine o quando poderia ter produzido se sua vida não tivesse sido abreviada, convido a todos a lerem sua biografia no Wikipédia.

Uma comunidade atuante

Se gosta de programar convido-o a explorar o GITHUB, que existem inúmeras comunidades que trabalham para o bem comum, codificando ferramentas para auxiliar a produtividade e criar apps livres e sem licenças.

Muitas pessoas ficaram indignadas com os administradores do GitHub por terem suspenso a conta de Squires, afinal de contas, ele nao fez nenhum ato indevido, afinal o código era dele e o repositório idem, nao prejudicou ninguém apenas gerou muita repercussão e fez a comunidade parar, pensar e homenagear a memoria de um grande Dev.

Conclusão

Caro padawan hoje o tiozão apresentou mais um caso curioso no mundo da informática, quem conhece alguns dos temas abordados e quiserem aproveitar para enriquecer nosso artigo, fiquem a vontade e deixem nos comentários.

Eu particularmente fiquei muito emocionado na sigila homenagem e ao mesmo tempo protesto bem-humorado, que deixou muita gente de cabelo em pé.

Espero ter ajudado, lembre-se que é um trabalho continuo.


No alt text provided for this image


Mais momento jabá, para distrair, uma visita a Araraquara, num insólito posto de gasolina, onde o Batman e seu grande fan, criaram inúmeras atrações para ser explorado, para a alegria de miúdos e graúdos, e se tiverem um pouco de sorte poderão dar uma volta no Bat-movel, visite meu vídeo e veja para onde fui desta vez:


Pode me dar uma ajudinha no YouTube?


Artigo original : https://web.dio.me/articles/zalgo-uma-pequena-sabotagem-bibliotecas-na-fakerjs?back=%2Farticles&open-modal=true&page=1&order=oldest

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...