☕ 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

terça-feira, 10 de agosto de 2021

REDEFINES, Compiler Options e o Diagnóstico que o COBOL Iniciante Não Vê

 

Bellacosa Mainframe e o redefines em cobol risco de perigo eminente

☕ Um Café no Bellacosa Mainframe

REDEFINES, Compiler Options e o Diagnóstico que o COBOL Iniciante Não Vê

🩺 House M.D. entra no CPD: “O compilador não mente. O programador é que perguntou a coisa errada.”

Existe um momento inevitável na vida de todo programador COBOL.

Você está diante de um programa aparentemente simples.

O JCL compilou.

O retorno foi bonito.

MAXCC=0

Nenhuma explosão.

Nenhum abend.

Nenhum operador telefonando.

Nenhum gerente atravessando o corredor com aquela expressão típica de quem acabou de descobrir que o processamento noturno está duas horas atrasado.

Você olha para o código e pensa:

— Funcionou.

E, em algum lugar do hospital Princeton-Plainsboro do mainframe, o Dr. Gregory House manca pelo corredor, toma um Vicodin imaginário e responde:

— Não. Apenas ainda não morreu.

Bem-vindo ao Bellacosa Mainframe.

Hoje vamos investigar um daqueles problemas que parecem pequenos demais para merecer atenção até o dia em que deixam de ser pequenos:

REDEFINES com tamanhos diferentes.

E, a partir dele, vamos abrir uma porta muito maior:

  • como o COBOL organiza memória;

  • o que REDEFINES realmente faz;

  • por que o compilador pode aceitar coisas que você não deveria escrever;

  • como identificar diferenças de tamanho;

  • como usar MAP;

  • como usar XREF;

  • quais opções de compilação ajudam;

  • onde essas opções podem ser configuradas;

  • o que é CBL;

  • o que é PROCESS;

  • o que é SYSOPTF;

  • o que é OPTFILE;

  • o que é IGYCDOPT;

  • como funciona a precedência das opções;

  • e por que um bom programador COBOL precisa aprender a ler o listing como um médico lê um exame de sangue.

Pegue o café.

Temos um paciente.



🩻 Caso clínico: o REDEFINES suspeito

Imagine o seguinte código:

       WORKING-STORAGE SECTION.

       01  WS-AREA-ORIGINAL.
           05 WS-CAMPO-A        PIC X(10).
           05 WS-CAMPO-B        PIC X(10).

       01  WS-AREA-NOVA
           REDEFINES WS-AREA-ORIGINAL.
           05 WS-CAMPO-C        PIC X(30).

O iniciante olha rapidamente.

Área original:

10 + 10 = 20 bytes

Área redefinida:

30 bytes

Logo nasce a pergunta:

“Como uma área de 30 bytes pode redefinir uma área que aparentemente tem 20?”

Excelente pergunta.

E é exatamente aí que mora a armadilha.



🧠 Primeiro diagnóstico: REDEFINES não significa “nova variável”

Talvez o erro conceitual mais comum seja imaginar que isto:

01 A PIC X(10).
01 B REDEFINES A PIC X(10).

significa:

A = 10 bytes
B = 10 bytes
TOTAL = 20 bytes

Não.

Pense em uma gaveta.

Existe uma única gaveta física.

Você pode colocar uma etiqueta nela escrito:

A

ou outra etiqueta:

B

Mas continua sendo a mesma gaveta.

Conceitualmente:

             MEMÓRIA

      ┌──────────────────┐
A --> │ A B C D E F G H I J │
      └──────────────────┘
               ↑
B -------------┘

A e B são duas maneiras diferentes de interpretar os mesmos bytes.

Então grave isto:

REDEFINES cria uma nova visão lógica, não necessariamente uma nova área independente de storage.

Uma frase Bellacosa para decorar:

REDEFINES não constrói outro apartamento. Ele entrega outra planta do mesmo apartamento.



🏠 Um exemplo clássico e correto

Datas são perfeitas para entender isso.

       01  WS-DATA.
           05 WS-DATA-INTEIRA   PIC X(08).

       01  WS-DATA-DETALHE
           REDEFINES WS-DATA.
           05 WS-ANO            PIC 9(04).
           05 WS-MES            PIC 9(02).
           05 WS-DIA            PIC 9(02).

Se WS-DATA-INTEIRA contiver:

20260816

a mesma sequência pode ser visualizada assim:

WS-DATA-INTEIRA

┌─────────────────────────┐
│ 2 0 2 6 0 8 1 6         │
└─────────────────────────┘

ou:

WS-DATA-DETALHE

┌────────────┬──────┬──────┐
│ WS-ANO     │ MÊS  │ DIA  │
│ 2026       │ 08   │ 16   │
└────────────┴──────┴──────┘

Mesmos oito bytes.

Duas interpretações.

Perfeito.


🚨 Então o tamanho precisa ser sempre igual?

Aqui começa a parte interessante.

Para ensinar um iniciante, eu usaria uma regra extremamente conservadora:

TAMANHO DO REDEFINES
        =
TAMANHO DA ÁREA REDEFINIDA

Essa regra evita muitos erros.

Mas o COBOL real é mais complexo.

Dependendo do nível da estrutura, da versão do compilador, das regras da linguagem e do Enterprise COBOL utilizado, algumas redefinições com comprimentos diferentes podem ser aceitas.

Ou seja:

O compilador aceitar não significa que o design seja bom.

House provavelmente escreveria no quadro:

COMPILES ≠ CORRECT

E depois apagaria metade da palavra só para irritar a equipe.


🧪 O erro realmente perigoso

O problema não é simplesmente escrever:

05 B REDEFINES A PIC X(30).

O problema é escrever isso sem perceber as implicações.

Porque daí temos uma diferença enorme entre duas perguntas:

Pergunta errada

“O compilador aceitou?”

Pergunta certa

“O layout de memória resultante é exatamente aquele que eu acredito que seja?”

A segunda pergunta separa quem está apenas digitando COBOL de quem está começando a entender COBOL.


🔬 Não confie apenas nos olhos: use o MAP

Aqui aparece um dos recursos mais úteis e menos apreciados pelos iniciantes:

MAP

Ao compilar com MAP, o Enterprise COBOL produz informações sobre o layout da DATA DIVISION.

Em outras palavras:

o compilador mostra como ele entendeu seus campos.

Isso é quase um raio-X da memória.

Imagine:

       01 WS-REGISTRO.
          05 WS-NOME     PIC X(20).
          05 WS-IDADE    PIC 99.
          05 WS-SALARIO  PIC S9(7)V99 COMP-3.

Você pode acreditar que sabe exatamente como isso está organizado.

Mas o listing é a resposta do compilador.

E sempre que houver estruturas complexas com:

REDEFINES
OCCURS
COMP
COMP-3
SYNC
SIGN
GROUP ITEMS
COPYBOOKS

a leitura do mapa se torna extremamente valiosa.


🩻 MAP é o raio-X; SOURCE é a ficha clínica

Eu normalmente colocaria em desenvolvimento algo semelhante a:

MAP
SOURCE
XREF(FULL)

Cada opção responde uma pergunta diferente.

SOURCE

Você vê o fonte associado ao listing.

Isso facilita conectar mensagens, offsets e referências ao código que realmente foi compilado.

Parece trivial.

Até você descobrir que o programa que estava olhando não era exatamente o programa que entrou na compilação.

Copybooks entram.

Pré-compiladores entram.

Conditional compilation entra.

E de repente:

“Mas no meu fonte não está assim!”

Bem-vindo ao mainframe.

O compilador não lê suas intenções.

Ele lê aquilo que efetivamente recebeu.


🧬 XREF(FULL): quem mexeu no paciente?

XREF significa referência cruzada.

Imagine que você encontra:

WS-CUSTOMER-AREA

e quer saber:

  • onde foi declarada;

  • onde foi usada;

  • quem altera;

  • quem consulta;

  • quais parágrafos fazem referência a ela.

É aí que:

XREF(FULL)

se torna extremamente útil.

Ele não é especificamente um detector mágico de REDEFINES incorreto.

Mas responde uma pergunta fundamental na investigação:

“Quem está usando esta área?”

House chamaria isso de procurar quem teve contato com o paciente antes dos sintomas aparecerem.


🧯 Regra prática para o iniciante

Sempre que você encontrar:

REDEFINES

pare.

Faça quatro perguntas:

1. Qual é o tamanho da área original?

2. Qual é o tamanho da redefinição?

3. Essa diferença é intencional?

4. Eu conferi o MAP?

Essa pausa de trinta segundos pode economizar horas de debugging.


🧮 Não confie demais na contagem visual

Isto parece fácil:

05 CAMPO-A PIC X(10).
05 CAMPO-B PIC X(10).

Total:

20

Mas layouts reais podem envolver:

05 VALOR-A PIC S9(9) COMP.
05 VALOR-B PIC S9(7)V99 COMP-3.
05 TABELA OCCURS 15 TIMES.

Agora contar “na cabeça” começa a ficar menos divertido.

E podemos adicionar:

SYNC
USAGE
SIGN
OCCURS DEPENDING ON
nested groups
copybooks

Pronto.

Você não está mais contando caracteres.

Está fazendo arqueologia.


🗿 Easter egg número 1: Indiana Jones e o Copybook Perdido

Todo programador COBOL experiente já encontrou algo assim:

COPY ABCD001.

Você abre.

Dentro existe:

COPY ABCD002.

Abre o segundo.

Existe:

COPY ABCD003.

Quinze minutos depois você está procurando um copybook criado em 1989 por um programador chamado Geraldo que se aposentou antes do Windows 95.

Indiana Jones tinha menos trabalho.


🧪 Existe warning para REDEFINES?

A resposta precisa ser cuidadosamente entendida.

O Enterprise COBOL possui diversas opções de diagnóstico e comportamento, incluindo regras relacionadas a construções da linguagem.

Uma opção interessante é a família:

RULES

e, dentro dela, configurações relacionadas à permissividade de redefinições.

Por exemplo:

RULES(NOLAXREDEF)

pode tornar determinadas situações de REDEFINES mais rigorosas.

Mas atenção:

não pense em NOLAXREDEF como um “detector universal de REDEFINES maior”.

Isso seria simplificar demais.

Ele atua sobre regras específicas da linguagem e situações de redefinição que o compilador poderia tratar de maneira mais permissiva.

Então a estratégia profissional não deve ser:

“Coloquei NOLAXREDEF, estou protegido.”

Deve ser:

compiler diagnostics
+
MAP
+
coding standard
+
static analysis
+
code review

Defesa em profundidade.

Segurança da informação descobriu isso faz décadas.

COBOL também merece.


🏥 Diagnóstico diferencial

House raramente acreditava na primeira hipótese.

Você também não deveria.

Se um programa possui corrupção de campos, valores estranhos ou informações que aparecem “do nada”, REDEFINES é apenas uma das hipóteses.

Também investigue:

MOVE com tamanhos incompatíveis
subscripts incorretos
índices fora do limite
OCCURS
OCCURS DEPENDING ON
reference modification
COMP-3 inválido
campos numéricos contendo lixo
copybook incompatível
arquivo com LRECL errado
layout diferente entre produtor e consumidor
LINKAGE SECTION incorreta
CALL com assinatura incompatível
CICS COMMAREA
MQ payload
VSAM
Db2 host variables

O sintoma pode aparecer em um campo.

A doença pode estar cinquenta linhas antes.

Ou cinquenta programas antes.


🧰 Minha configuração de investigação

Para ambiente de desenvolvimento, algo nessa filosofia é ótimo:

SOURCE
MAP
XREF(FULL)

e opções adicionais de diagnóstico conforme a política da instalação.

Não estou dizendo:

“Use exatamente esse conjunto em qualquer empresa.”

Cada shop possui padrões, versões, custos de listing, ferramentas, pipelines e políticas.

Mas o princípio é sólido:

Durante desenvolvimento, peça ao compilador para mostrar o máximo possível sobre o que ele entendeu.


🔧 “Mas onde coloco esses parâmetros?”

Agora chegamos a outra pergunta fundamental.

Muitos iniciantes acreditam que as opções de compilação existem apenas no JCL:

//COBOL EXEC PGM=IGYCRCTL,
// PARM='MAP,XREF,SOURCE'

Não.

O JCL é apenas uma das portas.

E entender isso muda completamente sua visão sobre compilação COBOL.


🚪 Porta 1 — PARM no JCL

A forma mais conhecida:

//COB EXEC PGM=IGYCRCTL,
// PARM='MAP,XREF(FULL),SOURCE'

Ou por meio de uma PROC corporativa.

É simples.

É visível.

E funciona bem.

Mas existe uma fraqueza:

depende do ambiente de compilação utilizado.

Se alguém usar outra PROC, outro pipeline ou outro processo, aquelas opções podem mudar.


🚪 Porta 2 — CBL

Você pode colocar opções diretamente no fonte.

Exemplo:

       CBL MAP,XREF(FULL),SOURCE
       IDENTIFICATION DIVISION.
       PROGRAM-ID. PACIENTE.

Isso significa:

“Este programa solicita essas opções.”

É muito poderoso porque a configuração viaja junto com o fonte.


🚪 Porta 3 — PROCESS

Outra sintaxe:

       PROCESS MAP,XREF(FULL),SOURCE
       IDENTIFICATION DIVISION.

Conceitualmente, PROCESS e CBL servem para informar opções ao compilador a partir do próprio programa.

Existe uma regra importante:

essas diretivas aparecem no início apropriado do fonte.

Elas não são statements executáveis.

Você não coloca:

PROCEDURE DIVISION.
    PROCESS MAP.

Isso seria como tentar mudar a configuração do aparelho de raio-X depois que o paciente já voltou para casa.


🧳 Quando usar CBL ou PROCESS?

Imagine uma aplicação que, por característica própria, precisa sempre ser compilada com determinada configuração.

Nesse caso faz sentido considerar:

CBL / PROCESS

Mas existe uma discussão arquitetural importante.

Você quer que:

cada programa decida suas próprias opções

ou:

a empresa defina um padrão central?

Essa decisão importa.

Porque programas vivem décadas.

Padrões corporativos mudam.

Compiladores mudam.

Ambientes mudam.


🚪 Porta 4 — SYSOPTF e OPTFILE

Agora entramos numa solução muito interessante para shops organizadas.

Em vez de escrever quarenta opções no JCL, você pode manter um arquivo de opções.

Algo conceitualmente assim:

EMPRESA.COBOL.OPTIONS(DEV)

contendo:

MAP
SOURCE
XREF(FULL)

E associá-lo como:

//SYSOPTF DD DSN=EMPRESA.COBOL.OPTIONS(DEV),DISP=SHR

O compilador pode então consumir essas opções através do mecanismo apropriado de option file.

Isso permite criar perfis.

Por exemplo:

EMPRESA.COBOL.OPTIONS(DEV)

EMPRESA.COBOL.OPTIONS(TEST)

EMPRESA.COBOL.OPTIONS(PROD)

EMPRESA.COBOL.OPTIONS(DEBUG)

EMPRESA.COBOL.OPTIONS(MIGRATION)

Isso é muito mais elegante do que copiar e colar parâmetros em dezenas de PROCs.


🧠 Easter egg número 2: House odeia copy & paste

Se House fosse tech lead COBOL, provavelmente diria:

— Você copiou quarenta opções de compilação de um JCL de 2017 sem saber o que fazem?

— Sim.

— Então não temos um bug. Temos uma religião.


🚪 Porta 5 — IGYCDOPT

Agora chegamos ao porão do hospital.

Lugar onde iniciantes raramente entram.

O Enterprise COBOL possui defaults de instalação.

Um dos nomes importantes nesse universo é:

IGYCDOPT

É nele que a organização pode estabelecer defaults para o compilador.

Pense assim:

programador
   |
   v
programa COBOL
   |
   v
PROC/JCL
   |
   v
Enterprise COBOL
   |
   v
defaults da instalação

O IGYCDOPT permite que a instalação diga:

“Se ninguém especificar nada diferente, use isto.”

E certas opções podem ainda ser controladas de modo que não sejam livremente sobrescritas.

É aí que recomendação vira governança.


🏛️ Política versus preferência

Existe uma diferença gigante entre:

“Recomendamos usar esta opção.”

e:

“A instalação está configurada desta maneira.”

Na primeira:

João usa.

Maria esquece.

Pedro usa outra PROC.

Carlos compila no pipeline antigo.

Na segunda:

a infraestrutura ajuda a garantir consistência.

Esse princípio aparece em tudo:

RACF
DevSecOps
Git
pipeline
quality gates
compiler defaults

Se algo é realmente importante, tente automatizar.


🧭 Mas quem ganha quando existem várias opções?

Excelente pergunta.

Imagine:

instalação:

NOMAP

JCL:

MAP

fonte:

CBL NOMAP

Qual vale?

Isso nos leva à:

⚔️ PRECEDÊNCIA DAS OPÇÕES

Você precisa entender que opções podem ser fornecidas por diferentes origens.

Conceitualmente:

INSTALLATION DEFAULTS
        ↓
INVOCATION / JCL
        ↓
PROCESS / CBL

mas existem particularidades, exceções e opções que podem ser fixadas pela instalação.

Então nunca faça debugging baseado apenas em:

“Eu tenho certeza de que a PROC usa MAP.”

Abra o listing.

Veja:

OPTIONS IN EFFECT

O compilador costuma informar quais opções efetivamente estavam ativas.

Essa seção vale ouro.


🔍 Regra Bellacosa número 1

Não pergunte qual opção estava no JCL. Pergunte qual opção estava em efeito.

Existe uma diferença brutal.

O JCL representa intenção.

O listing representa execução.


🧾 Leia o listing!

Aqui está talvez a maior dica deste artigo.

Programador iniciante pensa que o listing serve para:

achar erro de compilação

Programador intermediário usa para:

achar warning

Programador experiente usa o listing como:

documentação do programa compilado

Ele procura:

compiler version
compiler options
messages
data map
cross reference
code generation
statistics
source expansion

Você começa olhando um erro.

Termina entendendo como o compilador enxerga seu programa.


🩸 MAXCC=0 é apenas pressão arterial normal

Este merece moldura.

Você recebeu:

MAXCC=0

Parabéns.

Isso significa apenas que aquele job terminou com aquela condição.

Não significa:

lógica correta
layout correto
regra de negócio correta
performance boa
thread safety
dados corretos
segurança correta
arquivo correto
transação correta

House olha o monitor cardíaco.

Paciente vivo.

Ele não diz:

— Curado.

Ele pergunta:

— Por que ele desmaiou?

Faça o mesmo.


🔬 Passo a passo para investigar um REDEFINES

Encontrou:

REDEFINES

Faça isto.

Passo 1 — identifique a área original

Exemplo:

01 WS-ORIGINAL.
   05 A PIC X(10).
   05 B PIC X(10).

Calcule:

20 bytes

Passo 2 — identifique todas as redefinições

Pode existir mais de uma:

01 WS-TEXTO REDEFINES WS-ORIGINAL.
...

01 WS-NUMERICO REDEFINES WS-ORIGINAL.
...

01 WS-FLAGS REDEFINES WS-ORIGINAL.
...

Não pare na primeira.


Passo 3 — calcule os comprimentos

Faça isso cuidadosamente.

Principalmente se houver:

COMP
COMP-3
OCCURS
nested groups

Passo 4 — procure a intenção

Pergunte:

“Por que alguém criou este REDEFINES?”

Talvez seja:

header/body
mensagem de vários tipos
record type
layout de arquivo
estrutura histórica
flags
data
packed decimal
interface externa

Nem todo código estranho está errado.

Às vezes existe uma razão escrita em 1994.

Às vezes não.


🗿 Easter egg número 3: comentário de 1994

Você encontra:

*> NÃO ALTERAR ESTA ÁREA

Sem explicação.

Sem nome.

Sem ticket.

Sem documentação.

Naturalmente você pensa:

— Por quê?

A resposta está enterrada em uma fita magnética enviada para Iron Mountain durante o governo Itamar Franco.

Não altere.


🧪 Passo 5 — compile com MAP

Veja offsets.

Veja comprimentos.

Veja como o compilador efetivamente montou a área.

Nunca deixe a teoria vencer o mapa real.


🔍 Passo 6 — consulte o XREF

Descubra quem usa:

área original
área redefinida
campos individuais

Isso ajuda muito a entender o impacto.


🧬 Passo 7 — procure interfaces

Essa área vai para algum lugar?

WRITE
CALL
EXEC CICS LINK
EXEC CICS XCTL
EXEC CICS SEND
EXEC CICS RECEIVE
MQPUT
MQGET

Ou talvez:

arquivo VSAM
arquivo sequencial
Db2
IMS
socket
API
z/OS Connect

A área interna pode ter trinta bytes.

A interface externa pode esperar vinte.

Agora temos um problema de verdade.


💣 O pior cenário: contratos de dados

Imagine:

Programa A produz:

20 bytes

Programa B acredita que recebe:

30 bytes

Programa C possui um copybook antigo com:

24 bytes

Todos compilam.

Todos possuem:

MAXCC=0

House sorri.

— Finalmente um caso interessante.

Isso é exatamente o tipo de problema que aparece em ambientes legados.

O bug não está em um programa.

Está no contrato invisível entre programas.


🧠 Por isso copybook é tão importante

Copybooks não são apenas uma conveniência para evitar repetição.

Eles funcionam como contratos compartilhados de dados.

Quando bem utilizados:

Programa A ─┐
Programa B ─┼── COPY CUSTOMER
Programa C ─┘

todos enxergam a mesma definição.

Mas existe outro perigo:

versões diferentes do mesmo copybook

Programa A compilado ontem.

Programa B compilado seis anos atrás.

O dataset do copybook foi atualizado.

O módulo load de B continua com o layout antigo.

Agora você possui duas verdades.

Uma no fonte.

Outra no executável.

Bem-vindo novamente ao mainframe.


🔦 Static analysis: não espere um humano perceber

Aqui está uma excelente regra automática:

FOR EACH REDEFINES

compare
LENGTH(original)
with
LENGTH(redefinition)

Se:

=

normal.

Se:

<>

alerta.

Se:

redefinition > original

alerta forte.

Não porque todo caso seja necessariamente inválido.

Mas porque todo caso merece explicação.

Esse é o princípio de uma boa ferramenta estática:

destacar o que é incomum o bastante para merecer revisão humana.


🤖 Code review aumentado por IA

Aqui está uma aplicação interessante para IA em mainframe.

Imagine um pipeline lendo COBOL e produzindo:

WARNING COBOL-RD-001

WS-TRANSACTION-V2
redefines
WS-TRANSACTION

Original logical length: 128
Redefinition length: 136

Difference: +8 bytes

Review recommended.

Depois correlaciona com:

CALL USING
CICS COMMAREA
COPYBOOK
MQ
arquivo

Agora estamos usando IA não para substituir o programador.

Estamos usando IA para apontar:

“Ei, House. Esse exame aqui está estranho.”


🧯 Regra Bellacosa número 2

Nunca trate warning como decoração.

Compile listings antigos e você encontrará:

W
W
W
W
W
W
W

O programa está em produção há quinze anos.

Todo mundo diz:

— Sempre funcionou.

Essa é possivelmente uma das frases mais perigosas da informática.


🐸 “Sempre funcionou”

Uma aplicação COBOL antiga pode ter sobrevivido:

mudanças de hardware
mudanças de compilador
mudanças de sistema operacional
mudanças de middleware
novas versões de Db2
novas versões de CICS
mudanças de encoding
migrações
novos copybooks

Até que alguém recompila.

Então aparece:

“Funcionava antes.”

Talvez.

Talvez apenas estivesse dependendo de um comportamento antigo.


🧬 Compiler migration é medicina geriátrica

Migrar COBOL 4 para COBOL 6, por exemplo, não é simplesmente:

recompile

Você está trazendo código escrito sob determinadas hipóteses para outro ambiente.

Coisas que passaram despercebidas por décadas podem emergir.

Por isso opções de diagnóstico, listings, testes e análise estática são tão importantes.


🔐 Onde eu colocaria as opções?

Aqui entra arquitetura de engenharia.

Para um programa específico

Considere:

CBL
PROCESS

quando fizer sentido que aquela configuração acompanhe o fonte.


Para um projeto

Pode fazer sentido:

SYSOPTF
option file

Para toda a empresa

Pode fazer sentido usar:

defaults de instalação
IGYCDOPT

Para uma execução específica

Use:

PARM no JCL

Isso cria quatro níveis mentais:

PROGRAMA
PROJETO
PIPELINE
EMPRESA

Uma arquitetura muito melhor do que:

“coloca esse PARM aí e vê se funciona.”

🏗️ Um padrão de shop possível

Imagine:

           CORPORATIVO
              |
          IGYCDOPT
              |
     -------------------
     |                 |
  projeto A         projeto B
     |                 |
 SYSOPTF           SYSOPTF
     |                 |
   PROC              PROC
     |                 |
 programa           programa
 CBL/PROCESS        CBL/PROCESS

Agora você consegue controlar:

defaults
exceções
projetos
programas especiais

Isso é engenharia.


🚨 Não transforme opção de compilador em superstição

Outro erro comum:

“Fulano disse para usar SSRANGE.”

Então alguém coloca:

SSRANGE

sem saber o que ela faz.

Depois alguém copia.

Depois vira padrão.

Dez anos depois ninguém sabe por quê.

Toda opção de compilador deveria possuir pelo menos:

nome
objetivo
impacto
ambiente
quando usar
quando não usar

📚 Crie um catálogo corporativo

Algo simples:

OPTION: MAP

Uso:
Development / Migration

Objetivo:
Mostrar layout da Data Division.

Obrigatória:
DEV = SIM
PROD = opcional

Responsável:
Mainframe Engineering

Faça isso para:

MAP
XREF
SOURCE
SSRANGE
NUMCHECK
OPTIMIZE
ARCH
TEST
LIST
OFFSET

Seu eu do futuro agradecerá.


🧠 Easter egg número 4: Differential Diagnosis

Quando House recebe um paciente, a equipe lista hipóteses no quadro.

Faça exatamente isso no debugging.

Sintoma:

WS-VALOR contém lixo

Quadro:

REDEFINES?
MOVE?
SUBSCRIPT?
COMP-3?
COPYBOOK?
CALL?
FILE LAYOUT?
CICS?
STORAGE OVERWRITE?

Depois elimine hipóteses com evidência.

Isso é debugging profissional.

Não:

“Vou mudar isso aqui e rodar.”

🧪 O compilador é testemunha, não advogado

Ele lhe diz:

o que conseguiu compilar

Ele não garante:

o que você quis escrever

Essa distinção é central.

Um compilador pode aceitar código perfeitamente legal que implemente uma ideia completamente errada.

Exemplo:

MOVE WS-SALDO TO WS-CPF.

Talvez os campos sejam compatíveis.

O compilador não conhece sua regra de negócio.

Ele não sabe que você acabou de colocar saldo bancário dentro do CPF.

Ele apenas executa ordens.


🎯 Checklist Bellacosa para REDEFINES

Antes de aprovar qualquer REDEFINES, responda:

  • Sei exatamente qual área está sendo redefinida.

  • Conheço o tamanho da área original.

  • Conheço o tamanho de cada redefinição.

  • Entendo por que a redefinição existe.

  • Conferi COMP, COMP-3 e outros USAGE.

  • Verifiquei OCCURS.

  • Consultei o MAP.

  • Consultei referências com XREF.

  • Verifiquei copybooks relacionados.

  • Verifiquei interfaces externas.

  • Sei qual versão do compilador foi utilizada.

  • Conferi as opções efetivamente em uso.

  • Não estou confiando apenas em MAXCC=0.

Se você respondeu “não” a cinco itens:

House acabou de pedir uma ressonância.


🩺 Uma pequena autópsia de exemplo

Considere:

       01 CUSTOMER-RECORD.
          05 CUSTOMER-ID       PIC X(10).
          05 CUSTOMER-NAME     PIC X(30).

       01 CUSTOMER-ALT
          REDEFINES CUSTOMER-RECORD.
          05 CUSTOMER-DATA     PIC X(48).

O programador vê:

CUSTOMER-RECORD = 40

CUSTOMER-ALT = 48

Primeira pergunta:

Por quê?

Talvez exista uma razão.

Talvez CUSTOMER-ALT represente uma versão futura.

Talvez alguém aumentou um campo.

Talvez um copybook tenha sido alterado pela metade.

Talvez seja simplesmente erro.

O ponto é:

a diferença precisa ser explicada.


🧬 Agora imagine produção

Esse registro é enviado:

CALL 'CUSTSRV'
    USING CUSTOMER-RECORD

O programa chamado possui:

LINKAGE SECTION.

01 LK-CUSTOMER PIC X(40).

Mas o chamador manipula uma visão de 48.

Você acabou de transformar uma curiosidade de DATA DIVISION em uma investigação de interface.

Por isso mainframe não é apenas sintaxe COBOL.

É ecossistema.


🚂 O programa nunca viaja sozinho

Todo COBOL real está conectado a alguma coisa:

JCL
PROCs
Db2
CICS
IMS
VSAM
MQ
sort
files
copybooks
subprograms
APIs
RACF
z/OS

Então todo problema de layout deve ser investigado no contexto do sistema.

Esse é um dos saltos mentais mais importantes para quem começa.

Você deixa de perguntar:

“Este programa está certo?”

e começa a perguntar:

“Este programa está correto dentro dos contratos do sistema?”

Isso é maturidade.


🎬 Easter egg final: “Everybody lies”

House possui uma frase famosa:

Everybody lies.

No mainframe eu adaptaria:

Everybody assumes.

O programador assume que o campo possui 20 bytes.

O analista assume que o copybook é o mesmo.

O operador assume que MAXCC=0 significa sucesso funcional.

O arquiteto assume que a PROC é padrão.

O desenvolvedor assume que MAP estava ativo.

O time assume que aquele load module foi recompilado.

E o mainframe?

O mainframe não assume nada.

Ele executa exatamente aquilo que foi definido.


☕ Conclusão — Aprenda a investigar, não apenas a compilar

REDEFINES parece um pequeno detalhe da DATA DIVISION.

Mas ele ensina uma lição gigantesca sobre COBOL.

Ensina que existe diferença entre:

fonte

e:

layout efetivo

Entre:

intenção

e:

compilação

Entre:

programa compilado

e:

programa correto

Por isso, quando você encontrar um REDEFINES, não trate como uma palavra reservada qualquer.

Olhe o tamanho.

Olhe o mapa.

Olhe o listing.

Olhe o XREF.

Descubra quais opções de compilação estavam realmente ativas.

Saiba se vieram:

do JCL
do CBL
do PROCESS
do SYSOPTF
do option file
dos defaults da instalação

Entenda a precedência.

Conheça seu compilador.

E, principalmente, abandone uma das frases mais perigosas da profissão:

“O compilador aceitou.”

O compilador aceitar é apenas o começo da investigação.

A pergunta final continua sendo:

“O programa está fazendo exatamente aquilo que nós pensamos que ele está fazendo?”

House fecharia o prontuário.

O batch terminaria.

O café estaria frio.

E no SDSF apareceria:

MAXCC=0

Você sorriria.

Mas agora saberia que esse zero não é diagnóstico.

É apenas um sinal vital.

E programador COBOL bom não trata sinal vital.

Trata o sistema inteiro.

☕🦖

Bellacosa Mainframe — onde até um PIC X(20) pode esconder uma investigação médica, três copybooks esquecidos, duas PROCs corporativas e um comentário escrito antes de Java existir.

https://eljefemidnightlunch.blogspot.com/2022/07/alerta-vermelho-na-enterprise.html

https://eljefemidnightlunch.blogspot.com/2022/05/da-compilacao-execucao-de-um-programa.html

segunda-feira, 9 de agosto de 2021

Johnny Mnemonic e o Zoológico da Segurança da Informação — Quando 320 GB na Cabeça Pareciam Ficção e o Verdadeiro Perigo Já Estava Dentro da Rede

 


☕ Um Café no Bellacosa Mainframe

Com Johnny Mnemonic no papel de mensageiro, Martin Bishop cuidando da porta dos fundos, e Igor tentando descobrir se “watchdog” é um cachorro que late para o JES2

Johnny Mnemonic e o Zoológico da Segurança da Informação — Quando 320 GB na Cabeça Pareciam Ficção e o Verdadeiro Perigo Já Estava Dentro da Rede

Ou: Johnny carregava dados demais, a Yakuza queria extraí-los, a Pharmakom queria enterrá-los, Jones era um golfinho hacker, e o programador COBOL descobriu que honeypot, canary token, logic bomb e dead man’s switch não são nomes de banda cyberpunk

Há filmes que envelhecem como leite esquecido no sol. Há outros que envelhecem como um log de segurança: ficam estranhos, incompletos, meio granulados, mas de repente ganham uma segunda vida porque o mundo decidiu correr atrás deles.

Johnny Mnemonic, de 1995, pertence à segunda categoria.

Assistir hoje à história de Johnny, o mensageiro de dados interpretado por Keanu Reeves, é observar uma visão de futuro que acertou e errou com a mesma elegância caótica de Igor configurando um RACF em produção sem pedir janela de mudança. O filme imaginava um mundo de congestionamento digital, corporações farmacêuticas com poder de Estado, redes clandestinas, implantes cerebrais, dados valendo mais que dinheiro e pessoas sendo perseguidas porque carregavam informação inconveniente.

Bom, colegas: alguém olhou pela janela da década de 2020?

Hoje não precisamos instalar 320 GB no cérebro — e talvez seja melhor assim, porque Johnny passou o filme inteiro com a cabeça parecendo uma LPAR em 99% de CPU. Mas carregamos no celular uma vida inteira: credenciais, banco, saúde, conversas, fotos, localização, tokens de autenticação e, com alguma sorte, uma foto da senha do Wi-Fi escrita num papel. A diferença entre a ficção cyberpunk e a vida corporativa moderna é que no filme os criminosos usam roupa de couro e fios fluorescentes; na empresa real, às vezes usam uma conta de fornecedor, uma VPN esquecida e uma planilha chamada LISTA-ATUALIZADA-FINAL-v7.xlsx.

Este café é para o programador COBOL iniciante que está começando a perceber que segurança não é apenas “colocar senha no TSO”, nem instalar antivírus no desktop da recepção. Segurança é entender quem pode fazer o quê, por qual caminho, em qual momento, com qual prova, e o que acontece quando alguém decide que a regra do sistema é apenas uma sugestão educada.

E, já que o universo técnico gosta de batizar ameaças com nomes de bichos, minas, bombas, fantasmas e portas secretas, vamos visitar esse zoológico.



Prólogo — Johnny não era hacker: era um pendrive humano

No filme, Johnny Mnemonic é um data courier: um contrabandista de informação. Para evitar que arquivos confidenciais sejam encontrados em dispositivos convencionais, ele os transporta numa memória implantada no próprio cérebro.

A ideia parece extravagante, mas o princípio é extremamente atual: dados sensíveis precisam ser protegidos durante o armazenamento, o processamento e o transporte.

Em linguagem de mainframe, imagine que uma empresa precisa enviar uma base sigilosa entre dois ambientes. Não basta dizer “o dataset está protegido”. É preciso perguntar:

  • Quem leu o dado antes da transferência?

  • O arquivo foi criptografado?

  • Quem possui a chave?

  • A rede entre origem e destino é confiável?

  • Há logs?

  • O destinatário é realmente quem diz ser?

  • O dado será apagado da área temporária?

  • Se o job falhar, onde ficaram os restos?

Johnny falha em quase todas as perguntas. Ele transporta o conteúdo, mas não controla adequadamente a capacidade, o contexto, a integridade nem o destino final. É o equivalente cyberpunk de subir um arquivo crítico para uma área temporária, deixar permissão ampla, enviar a senha pelo mesmo e-mail e escrever no rodapé: “favor não compartilhar”.

A primeira lição é simples e brutal:

Dado sensível não deixa de ser sensível porque está viajando.

No mundo COBOL, isso vale para arquivos de folha de pagamento, saldos, CPF, cartões, dados médicos, apólices, cadastros, chaves de transferência e relatórios de auditoria. O seu programa pode estar perfeito, o PERFORM VARYING pode estar elegante, o compilador pode não apontar um único erro — e ainda assim o sistema pode vazar uma fortuna porque alguém gravou um arquivo temporário em local inadequado.



1. Watchdog — o cachorro que não protege o castelo, mas avisa que o vigia dormiu

O watchdog é um mecanismo de supervisão. Ele observa se um processo, serviço, dispositivo ou sistema continua funcionando como deveria. Se o processo para de responder, trava ou deixa de enviar um sinal periódico, o watchdog pode alertar, reiniciar o componente ou colocar o ambiente em estado seguro.

Pense num vigia noturno do castelo Bellacosa. Ele não precisa saber escrever COBOL; basta aparecer no corredor a cada quinze minutos, bater o cajado no chão e dizer: “ainda estou vivo”. Se ninguém o ouve por tempo demais, algo está errado.

No mainframe, uma analogia útil é o controle operacional de jobs, started tasks, CICS regions, serviços TCP/IP, agentes de monitoramento e componentes de middleware. Um monitor detecta que algo parou, que uma fila cresceu além do esperado ou que uma transação deixou de responder.

Mas aqui existe uma pegadinha importante: watchdog não é segurança completa.

Ele pode identificar indisponibilidade. Pode ajudar a reduzir o tempo de recuperação. Pode reiniciar um processo tombado. Porém, se o processo continua respondendo enquanto rouba dados, responde com toda a educação do mundo enquanto executa uma fraude, ou foi comprometido por uma conta privilegiada, o cachorro pode estar vendo o ladrão passar com crachá e marmita.

Por isso, disponibilidade não é o mesmo que segurança.

Um serviço pode estar “verde” no painel e, ainda assim, estar vazando clientes em silencioso processamento em lote.



2. Honeypot e honeytoken — o pote de mel e o biscoito que ninguém deveria tocar

Um honeypot, literalmente “pote de mel”, é uma isca. Pode ser um servidor falso, uma conta que não deveria ser usada, uma API deliberadamente exposta para observação ou uma máquina que parece valiosa, mas foi criada para atrair e estudar atividade maliciosa.

No universo de Johnny Mnemonic, seria aquela sala cheia de servidores luminosos que parecem guardar o segredo da cura, mas na realidade existem para identificar quem entrou, como entrou e o que tentou fazer.

Já um honeytoken é uma isca menor: uma credencial falsa, um documento com um link rastreável, uma chave de API sem uso legítimo, uma conta administrativa criada apenas para disparar alerta se alguém tentar utilizá-la.

Exemplo prático: você cria uma conta chamada DB2-PROD-EMERGENCY, documenta internamente que ela não deve ser usada e monitora qualquer tentativa de login. Se essa conta aparece num log às 02h43, não é um “evento para analisar na reunião da outra semana”. É sirene, café forte e investigação.

O canary token é um tipo de honeytoken com nome particularmente bonito. A referência vem dos canários usados em minas de carvão. Se o canário adoecia ou morria, era sinal de gases perigosos antes que os mineiros percebessem.

Na segurança moderna, o canário não precisa morrer — felizmente a área de compliance agradece. Ele apenas “canta”: alguém abriu um documento-isca, tentou usar uma senha falsa, acessou uma URL exclusiva ou copiou um arquivo que não deveria sequer chamar atenção.

Para o programador iniciante, a lição é maravilhosa: não espere o invasor chegar ao cofre. Coloque sensores discretos no caminho até ele.

Mas cuidado: honeypot não substitui controle de acesso. Uma casa cheia de câmeras continua precisando trancar a porta. A isca serve para detectar e aprender; não é autorização para deixar produção aberta como bar de estrada.



3. Dead man’s switch e kill switch — dois botões para dois tipos de desastre

O dead man’s switch, ou “interruptor do homem morto”, funciona por ausência de sinal. Se uma pessoa ou processo deixa de confirmar que está ativo, alguma ação automática é disparada.

Nos trens, historicamente, há mecanismos assim: se o operador solta um controle ou deixa de agir por determinado tempo, o sistema entende que ele pode estar incapacitado e aciona o freio.

Em segurança, o conceito aparece em chaves que exigem renovação periódica, sessões que expiram, controles de continuidade e processos que entram em modo seguro caso não recebam confirmação.

Imagine uma integração de pagamentos. Enquanto o sistema recebe confirmações válidas do componente de autorização, opera normalmente. Se a comunicação falha, em vez de aprovar transações às cegas, entra em contingência ou bloqueia certas operações. Isso é mais inteligente do que dizer: “bom, não temos resposta, então vamos torcer”.

O kill switch, por sua vez, é mais direto: é o mecanismo para interromper algo deliberadamente. Revogar uma chave vazada, desabilitar uma conta, desligar uma integração, suspender uma API, conter uma máquina comprometida ou bloquear uma função crítica.

O botão vermelho do laboratório.

A confusão comum é pensar que kill switch é sinal de fracasso. Não. Um kill switch bem projetado é maturidade operacional. O fracasso é descobrir no meio de um incidente que ninguém sabe desligar o componente comprometido sem derrubar o banco inteiro, o CICS, o café e talvez a cidade de Itatiba.

Em COBOL e mainframe, pense em controles claros para interromper processamento sensível: flags de aplicação, perfis RACF, parâmetros externos, segregação de funções e procedimentos documentados. Não enterre um “desliga tudo” misterioso em uma IF obscura na Procedure Division. O mecanismo precisa ser protegido, auditável, testado e acessível à equipe certa.



4. Logic bomb e time bomb — quando o código parece normal até decidir virar vilão

Uma logic bomb é um trecho de código que permanece dormente até que uma condição seja satisfeita. Pode ser uma data, uma conta específica, uma demissão, a ausência de um arquivo ou determinado valor de negócio.

Uma time bomb é a variante ativada pelo tempo: “no dia X, faça Y”.

Isso parece coisa de filme? Claro. Também parece coisa de casos reais de sabotagem interna: um funcionário insatisfeito deixa uma rotina que apaga, altera ou bloqueia algo quando determinada condição acontece.

Para quem programa COBOL, a lição é menos “caçar vilões usando sobretudo” e mais “tratar regras escondidas como risco”.

Uma condição de negócio legítima deve responder a perguntas simples:

  • Por que ela existe?

  • Quem a aprovou?

  • Onde foi documentada?

  • Como ela é testada?

  • Quem revisou a alteração?

  • Que evidência fica quando ela é acionada?

Se existe código como:

IF WS-DATA-PROCESSAMENTO = '31/12/2026'
    PERFORM ROTINA-ESPECIAL
END-IF

isso não é automaticamente uma bomba. Pode ser fechamento anual. Mas “ROTINA-ESPECIAL” não pode ser um porão escuro que ninguém compreende. Código crítico precisa de revisão, rastreabilidade, testes e separação entre quem escreve, quem aprova e quem implanta.

O inimigo não é apenas o malware. Pode ser uma regra de negócio que ninguém mais lembra por que foi criada.



5. Backdoor, trapdoor e a porta que Igor jurou ser “só para manutenção”

Backdoor é uma porta dos fundos: um meio oculto de acessar um sistema, normalmente contornando o processo esperado de autenticação ou autorização. Trapdoor é um nome mais antigo e quase sinônimo.

Nem toda porta alternativa nasce com intenção maliciosa. Desenvolvedores às vezes deixam um acesso de manutenção. Equipes criam usuários de emergência. Fornecedores pedem uma conta técnica. Em uma madrugada de crise, alguém cria um bypass “provisório”.

A palavra mais perigosa da tecnologia é “provisório”. Ela costuma sobreviver mais que o sistema que a originou.

No mundo z/OS, isso conversa diretamente com privilégios excessivos, IDs compartilhados, acessos UID(0), perfis genéricos amplos, contas de serviço sem dono claro e permissões concedidas “até segunda-feira” que continuam funcionando no Carnaval de três anos depois.

O princípio é o do menor privilégio: cada identidade deve ter apenas o acesso necessário, pelo tempo necessário, com uma finalidade conhecida.

Autenticar é provar quem você é. Autorizar é decidir o que pode fazer.

RACF não lê pensamentos. Um usuário pode autenticar perfeitamente e ainda não deveria ter acesso ao dataset, transação CICS, tabela Db2, recurso USS ou ambiente de produção solicitado.

Johnny tinha a informação. A Yakuza queria a informação. Pharmakom queria silenciá-la. Em todos os casos, o problema não era apenas “quem sabe a senha”; era quem possui o direito, a capacidade e a oportunidade de acessar o ativo.


6. Zombies, botnets e o perigo da máquina aparentemente normal

Um zombie é uma máquina comprometida e controlada remotamente. Uma botnet é a coleção dessas máquinas-zumbi, usada para ataques distribuídos, spam, fraude, mineração ilegal ou negação de serviço.

A imagem clássica é de milhares de computadores domésticos infectados. Mas o conceito é mais amplo: qualquer dispositivo administrado por quem não deveria administrá-lo pode virar soldado involuntário. Câmeras, roteadores, servidores, notebooks e máquinas virtuais podem entrar no exército.

A parte mais assustadora não é o zumbi gritando. É ele parecer perfeitamente normal.

Ele pode continuar processando, responder ao monitoramento, ter CPU razoável e até gerar logs aparentemente inocentes. A detecção depende de contexto: conexões estranhas, volume incomum de saída, comandos inesperados, acessos fora de horário, tentativas de privilégios e comportamento divergente da linha de base.

Em outras palavras: não procure apenas por monstro. Procure pelo funcionário que entrou no prédio, bateu ponto, tomou café, fez tudo certo — e carregou o cofre no bolso.



7. Phishing, baiting e engenharia social — o ataque que começa antes do teclado

Johnny Mnemonic vende uma estética de ataques ultratecnológicos, mas a segurança real muitas vezes cai pela arma mais velha do mundo: convencer alguém.

Phishing é a tentativa de roubar informações por mensagens falsas. Spear phishing é direcionado a uma pessoa ou equipe específica. Whaling mira executivos e pessoas com alto poder de aprovação. Smishing chega por SMS. Vishing vem por voz, geralmente com alguém fingindo ser banco, TI, fornecedor ou auditor.

Baiting é a isca: pendrive largado, arquivo “confidencial”, link para uma promoção, currículo ou relatório urgente. O invasor explora curiosidade, pressa, medo e hierarquia.

Você não precisa ensinar exploração técnica para entender o perigo. Basta imaginar esta mensagem:

“Olá, Vagner. Detectamos inconsistência em seu acesso corporativo. Abra o relatório e valide hoje para evitar bloqueio.”

Ela pode vir com logo bonito, português quase perfeito e urgência fabricada. Se a pessoa clica, entrega credenciais ou executa arquivo, o invasor não precisou derrubar firewall nenhum. Apenas pediu acesso com educação.

A resposta não é transformar todos em paranoicos incapazes de abrir e-mail. É criar hábitos:

  1. Desconfie de urgência fora do padrão.

  2. Verifique remetente e domínio real.

  3. Não valide pedido sensível pelo mesmo canal que o recebeu.

  4. Confirme com a pessoa ou área por contato conhecido.

  5. Reporte, em vez de apenas apagar, quando houver suspeita.

  6. Não use medo de parecer “chato” como critério de segurança.

O inimigo adora funcionários educados demais.



8. Man-in-the-Middle, Evil Twin e watering hole — o caminho também é parte do ataque

Um Man-in-the-Middle, ou MitM, é o atacante posicionado entre duas partes que acreditam conversar diretamente. Ele pode observar, modificar ou redirecionar a comunicação.

Um evil twin é uma rede Wi-Fi falsa que imita uma legítima: “Café_Bellacosa_Guest” versus “Cafe_Bellacosa_Guest”. O sujeito conecta na errada, aceita uma tela de login maliciosa e entrega credenciais como quem pede um cappuccino.

O watering hole, “poço d’água”, é uma estratégia em que criminosos comprometem um site frequentado pelo alvo. Em vez de caçar cada zebra, contaminam a fonte onde todas vão beber.

A lição é que segurança não mora apenas no servidor. Ela mora no trajeto, no certificado, na rede, no DNS, no navegador, no fornecedor, no dispositivo e na decisão de clicar.

Para aplicações corporativas, use conexões protegidas, valide certificados, evite segredos em texto claro, controle integrações e trate redes públicas como ambientes hostis. O Wi-Fi do aeroporto não é uma extensão espiritual do seu datacenter.



9. Zero Trust, crown jewels e blast radius — proteger tudo é bonito; proteger o essencial é sobrevivência

Zero Trust não significa “não confie em ninguém porque todos são vilões de filme noir”. Significa não conceder confiança automática apenas porque alguém está dentro da rede, usa um dispositivo corporativo ou tem um crachá antigo.

Cada acesso deve ser verificado de acordo com identidade, contexto, privilégio, dispositivo, risco e finalidade.

Os crown jewels, as “joias da coroa”, são os ativos mais importantes: dados de clientes, chaves criptográficas, contas privilegiadas, código-fonte, dados de pagamento, segredos industriais e sistemas que sustentam a operação.

Em um banco, talvez seja a autorização de transações. Em um hospital, prontuários e sistemas clínicos. Em uma empresa de varejo, pagamentos e dados pessoais. Em um ambiente mainframe, pode ser uma combinação de datasets críticos, bancos Db2, regiões CICS, IDs especiais e chaves que destrancam o castelo inteiro.

O blast radius é o raio da explosão: até onde o dano se espalha se uma conta, servidor ou integração for comprometida.

Se um único usuário pode ler toda a base de clientes, alterar tabelas de produção, submeter JCL, administrar segurança e copiar dados para fora, seu blast radius é do tamanho da galáxia de Johnny Mnemonic.

Segmente ambientes. Separe desenvolvimento, homologação e produção. Separe funções. Evite contas compartilhadas. Reduza privilégios. Registre ações importantes. Teste a recuperação.

É menos glamouroso que um golfinho cibernético, mas infinitamente mais útil.


10. O último recado de Johnny: dados são poder, e logs são memória

No fundo, Johnny Mnemonic não é só sobre tecnologia. É sobre informação concentrada, corporações decidindo o que o público pode saber e pessoas comuns pagando o preço de sistemas opacos.

Na segurança corporativa, isso se traduz em responsabilidade.

Um log não é apenas uma linha chata em arquivo. É a memória operacional do que aconteceu: quem acessou, o que tentou fazer, quando fez, de onde veio, se teve sucesso e que recurso foi tocado. Sem logs suficientes, uma investigação vira aquela reunião em que vinte pessoas dizem “não fui eu” enquanto Igor tenta achar evidência num print cortado do Teams.

Mas log sem contexto é apenas entulho digital. Segurança madura correlaciona eventos: um login estranho, uma escalada de privilégio, uma cópia de dados, uma conexão externa, uma alteração de regra e uma conta até então silenciosa. É quando o log vira narrativa.

Johnny carregava uma verdade que muita gente poderosa preferia apagar. No seu ambiente, a verdade pode estar no SMF, nos logs do RACF, no audit trail do Db2, no SIEM, no registro da aplicação ou na trilha de uma mudança de produção.

A pergunta é: você conseguirá encontrá-la antes do próximo ABEND?



Epílogo — o programador COBOL também é parte da muralha

Não existe “o pessoal de segurança” de um lado e “quem escreve programa” do outro. Toda linha que lê, grava, valida, transmite, mascara ou retém dados faz parte do desenho de segurança.

Você não precisa virar Johnny Mnemonic. Nem Martin Bishop. Nem um golfinho hacker chamado Jones.

Comece com o básico, que já é poderoso:

  • Saiba quais dados seu programa manipula.

  • Evite expor informações em telas, arquivos temporários e logs.

  • Valide entradas e regras de negócio.

  • Nunca trate acesso privilegiado como conveniência.

  • Documente exceções.

  • Peça revisão para mudanças sensíveis.

  • Desconfie de “usuário técnico sem dono”.

  • Entenda que disponibilidade, autenticação e autorização são coisas diferentes.

  • Aprenda a ler evidências de auditoria.

  • Pergunte sempre: “se isso der errado, até onde o estrago vai?”

A segurança da informação tem nomes curiosos porque ela nasceu tentando explicar perigos invisíveis: cães de guarda, canários, potes de mel, bombas lógicas, homens mortos, zumbis e portas secretas.

Mas, por trás de todos eles, existe a mesma verdade pouco cinematográfica: sistemas falham quando pessoas, processos e tecnologia deixam uma lacuna entre o que deveria acontecer e o que alguém consegue fazer.

E é justamente nessa lacuna que Johnny Mnemonic passa correndo, com 320 GB na cabeça, uma corporação atrás dele e Igor gritando do laboratório:

“Doutor! O canário cantou, o watchdog latiu e alguém deixou a conta ADMINISTRADOR aberta!”

Nesse momento, meu caro programador COBOL iniciante, você não precisa entrar em pânico.

Só precisa saber onde está a porta, quem tem a chave, o que há atrás dela — e onde fica o botão vermelho.

domingo, 8 de agosto de 2021

1995 — O Ano em que Queimei Meu Navio

 

Bellacosa Mainframe o ano em que sai da CESP

Um Café no Bellacosa Mainframe

1995 — O Ano em que Queimei Meu Navio

Ou: como um Técnico Nível IV abandonou uma pirâmide de carreira, enfrentou o Big Boss Boleto com uma espada que talvez não fosse de mithril e, sete anos depois, embarcou em Cumbica para descobrir até onde o mapa podia chegar


Prólogo — O velho professor encontra uma folha de papel

O velho Vagner está sentado diante do mainframe.

Barba grisalha.

Uma xícara de café esquecida ao lado do teclado.

Talvez um cachimbo apagado entre os dedos.

Na tela existem coisas que o rapaz de 1995 dificilmente reconheceria: APIs, cloud, inteligência artificial, DevOps, containers, interfaces modernas conversando com programas escritos décadas atrás.

Mas sobre a mesa há algo muito mais antigo.

Uma folha de papel.

Nela, uma pirâmide.

Não era desenho de criança.

Era meu futuro.

Eu havia desenhado os cargos que pretendia alcançar na Fundação CESP, os requisitos necessários, aproximadamente quantos anos levaria para atingir cada nível e aquilo que precisaria estudar e aprender.

Era uma espécie de CAREER PLAN artesanal, numa época em que ninguém ao meu redor chamava aquilo de roadmap profissional.

Eu tinha vinte e poucos anos e tentava desenhar o homem que seria aos quarenta.

O curioso é que o homem que chegou aos cinquenta acabou ficando grande demais para caber naquela folha.

Mas eu ainda não sabia disso.

Em 1995, aquela pirâmide era muito importante para mim.

E eu estava subindo.



1. Eu não estava fugindo de um emprego ruim

Esse detalhe precisa ficar muito claro.

Quando deixei a Fundação CESP, eu não estava fracassando.

Muito pelo contrário.

Eu trabalhava lá havia aproximadamente seis anos.

Tinha começado muito jovem.

Minha vida havia melhorado sensivelmente desde os primeiros anos. Eu havia saído do subúrbio e estava morando no Brás. Estava no terceiro ano da faculdade. Profissionalmente, recebera várias promoções.



Chegara a Técnico Nível IV.

Para mim aquilo quase parecia uma patente militar.

Técnico IV.

Havia orgulho naquele título.

Havia anos de trabalho dentro dele.

Havia conhecimento.

Havia noites estudando.

Havia experiência.

E, principalmente, havia um próximo nível claramente identificado.

Analista I.

Para desbloqueá-lo, faltava um requisito fundamental:

o diploma universitário.

Eu já estava no terceiro ano da faculdade.

Portanto, minha tela imaginária de RPG provavelmente seria parecida com isto:

╔══════════════════════════════════════╗
║         PROMOÇÃO PROFISSIONAL        ║
╠══════════════════════════════════════╣
║ Cargo atual: TÉCNICO NÍVEL IV        ║
║                                      ║
║ Experiência ................. OK     ║
║ Conhecimento ................ OK     ║
║ Tempo de empresa ............ OK     ║
║ Faculdade ................... 3º ano ║
║ Diploma universitário ....... LOCKED ║
║                                      ║
║ PRÓXIMA CLASSE: ANALISTA I           ║
╚══════════════════════════════════════╝

Eu conseguia enxergar o próximo degrau.

E depois dele havia outros.

A pirâmide estava funcionando.

Foi exatamente nessa hora que o diabo piscou o olho.



2. O Brasil mudava debaixo dos nossos pés

Para compreender aquela decisão, precisamos voltar mentalmente ao Brasil daqueles anos.

Quem começou a vida adulta depois da estabilização monetária talvez tenha dificuldade para imaginar o que significava viver numa economia em que preços, salários e expectativas mudavam constantemente.

Planos econômicos.

Inflação.

Indexadores.

Trocas de moeda.

Congelamentos.

Incerteza.

A URV havia sido introduzida em março de 1994 como unidade de conta, e em 1º de julho daquele ano ocorreu a conversão para o real. Portanto, quando tomei minha decisão em 1995, o real já circulava havia pouco mais de um ano. A memória do caos inflacionário anterior, entretanto, continuava muito próxima. O próprio Banco Central registra que a inflação acumulada em doze meses havia chegado a 4.922% em junho de 1994.

Ao mesmo tempo, outra palavra começava a aparecer cada vez mais:

privatização.

Dentro do setor elétrico paulista, aquilo não era uma discussão acadêmica.

Era uma possibilidade que podia modificar nossa vida.

O ambiente começou a mudar.

Havia pressão sobre salários, redução de benefícios e deterioração da sensação de segurança que anteriormente parecia acompanhar aquela carreira.

E havia um problema gigantesco:

gente.

Muita gente.

Empresas enormes não são reorganizadas como quem troca uma lâmpada.

Era possível imaginar redução de quadros, reestruturações, divisões e privatizações.

O que em 1995 ainda possuía boa dose de incerteza se materializaria nos anos seguintes. Em 1996, a imprensa já descrevia a CESP como submetida a uma reestruturação severa e discutia a venda de ativos e empresas do setor elétrico paulista. O processo avançaria depois para divisões e privatizações.

Mas cuidado.

Aqui existe uma armadilha narrativa.

Hoje sabemos o que aconteceu depois.

O Vagner de 1995 não sabia.



3. Não existe spoiler quando estamos vivendo

Quando contamos nossa própria história trinta anos depois, existe uma enorme tentação de transformar decisões acertadas em demonstrações de genialidade.

“Eu percebi tudo.”

“Eu sabia.”

“Eu previ.”

Bobagem.

Eu não possuía o dump do futuro.

Não havia:

//FUTURO JOB ...
//STEP01 EXEC PGM=PREVER1998

Eu tinha indícios.

Tinha preocupações.

Tinha minhas observações.

Tinha responsabilidades.

E tinha medo.

Muito medo.

Essa parte é importante.

Eu não entreguei minha carta de demissão como um herói de filme caminhando em câmera lenta enquanto alguma música épica tocava ao fundo.

Eu estava amedrontado.

Porque havia uma pergunta impossível de responder:

E se eu estiver errado?


4. O PDV aparece na dungeon

Surgiu então um Plano de Demissão Voluntária.

Quem aderisse receberia uma indenização interessante para deixar a empresa.

Era, na prática, a possibilidade de vender aquela posição profissional.

E comecei a pensar.

Pensei.

Pensei novamente.

Fiz contas.

Olhei para minha carreira.

Olhei para a faculdade.

Olhei para minha família.

Olhei para o futuro.

Olhei novamente para a CESP.

Eu tinha apenas 21 anos, mas possuía responsabilidades que não combinavam muito com a imagem despreocupada normalmente associada aos 21.

Minha família dependia de mim.

Não podia simplesmente apertar:

NEW GAME

e esperar que alguém pagasse minhas contas enquanto eu descobria minha vocação.

Foi então que apareceu aquele personagem que acompanha qualquer trabalhador durante toda a campanha.


5. Conheça o Big Boss Boleto

Todo RPG possui um chefe recorrente.

O meu era o boleto.

O boleto é extraordinário porque nunca morre.

Você derrota o boleto de agosto.

Ele reaparece em setembro.

Derrota setembro.

Outubro está esperando atrás da porta.

E o Big Boss ainda possui mini-bosses:

╔══════════ THE LEGEND OF BOLETO ══════════╗
║                                          ║
║ Aluguel ......................... LVL 99 ║
║ Faculdade ....................... LVL 80 ║
║ Alimentação ..................... LVL 70 ║
║ Transporte ...................... LVL 55 ║
║ Energia ......................... LVL 45 ║
║ Imprevisto ..................... LVL ??? ║
║                                          ║
║ FINAL BOSS: PRÓXIMO MÊS                  ║
╚══════════════════════════════════════════╝

O boleto possui uma característica maravilhosa:

ele não se sensibiliza com sonhos.

Você pode dizer:

— Estou me reinventando profissionalmente.

Ele responde:

— Vencimento dia 10.

— Estou buscando meu verdadeiro potencial.

— Multa de 2%.

— Estou numa jornada de autoconhecimento.

— Juros após o vencimento.

Por isso, abandonar a estabilidade não era uma aventura romântica.

Existiam consequências.


6. Dr. Adelmo pede que eu fique

Meu mentor, Dr. Adelmo, ficou chateado com minha decisão.

Disse para eu esperar.

Ficar mais um pouco.

As coisas poderiam melhorar.

Isso tornou tudo muito mais difícil.

Contrariar alguém que você considera idiota é fácil.

Contrariar alguém que respeita é outra história.

E ele possuía bons argumentos.

Eu era Técnico IV.

Estava cursando faculdade.

Faltava o diploma para que Analista I entrasse efetivamente no horizonte.

Tinha seis anos de empresa.

Uma carreira construída.

Uma pirâmide planejada.

Por que abandonar tudo justamente agora?

Talvez ele estivesse certo.

Talvez minha família estivesse certa.

Talvez eu estivesse prestes a cometer a maior besteira da minha vida.


7. “Você não tem juízo”

O pai da minha antiga namorada Cris também foi duro.

Onde já se viu fazer uma coisa dessas?

Funcionário de uma empresa daquela importância, com carreira, perspectivas, faculdade andando, simplesmente pedir para sair?

Não tinha juízo.

Minha própria família também me julgou.

Disseram que eu era insano.

Que talvez tivesse herdado a loucura de meu pai.

Para aquela geração, havia uma lógica muito poderosa:

conseguiu um bom emprego, segure.

E não posso sequer dizer que estavam sendo irracionais.

Eles estavam olhando para os dados disponíveis e chegando a uma conclusão.

Eu estava olhando para praticamente os mesmos dados e chegando a outra.

Só que havia uma resposta que eu ainda não sabia formular direito.

Décadas depois consigo:

Eu sou um Bellacosa.


8. Os Bellacosa não acreditam muito no fim do mapa

Minha família possui aventureiros.

Possui imigrantes.

Gente que saiu de algum lugar e começou novamente em outro.

E, se uma velha lenda familiar tiver algum fundo histórico, talvez existam até uns normandos perdidos nessa árvore genealógica.

Até comprovação genealógica, deixemos os normandos devidamente classificados como:

STATUS: FAMILY LEGEND
CONFIDENCE LEVEL: ?
COOLNESS FACTOR: 100

Mas a ideia me diverte.

Talvez exista uma certa dificuldade hereditária em acreditar que o mundo termina exatamente onde acaba o mapa conhecido.

O imigrante precisa pensar assim.

O aventureiro também.

Ele não sabe exatamente o que encontrará.

Vai mesmo assim.


9. Agosto de 1995 — COMMIT

Finalmente chegou o momento.

Entreguei a carta.

Agosto de 1995.

A decisão estava tomada.

Se isso fosse COBOL com SQL embutido, talvez fosse:

IF MEDO = TRUE
   AND RESPONSABILIDADE = TRUE
   AND FUTURO-CESP = INCERTO
   AND CONFIANCA-EM-MIM = TRUE

      MOVE 'S' TO PEDIDO-DEMISSIONARIO

      EXEC SQL
           COMMIT
      END-EXEC

END-IF.

O detalhe importante é o último comando.

COMMIT.

Depois dele não havia ROLLBACK.

Recebi a indenização.

E comecei outra vida.


10. Minha espada não era de mithril

Eu não tinha medo da luta.

Isso eu sabia fazer.

Trabalhar nunca havia sido o problema.

O medo era outro:

será que minha espada aguenta?

Eu acreditava em mim.

Mas acreditar não significa possuir certeza.

Será que meu conhecimento era suficiente?

Será que minha experiência tinha valor fora daquele ambiente?

Será que conseguiria outro trabalho?

Será que seria capaz de aprender aquilo que o mercado exigisse?

Será que sustentaria minha família?

Será que havia confundido coragem com imprudência?

Minha espada ainda não era de mithril.

Ou pelo menos eu não sabia se era.

Então comecei a lutar.


11. A primeira descoberta: derrota também dá XP

Os anos seguintes me ensinaram uma coisa que os videogames nem sempre reproduzem corretamente.

Na vida, perder uma batalha também pode gerar experiência.

Você perde dinheiro.

Perde tempo.

Perde uma oportunidade.

Machuca o orgulho.

Às vezes sai da dungeon quase sem HP.

Mas pode carregar conhecimento.

╔══════════ BATALHA PERDIDA ══════════╗
║                                     ║
║ Gold ....................... -500   ║
║ HP .......................... 11%    ║
║ Orgulho ..................... -35   ║
║ Equipamento .......... DANIFICADO   ║
║                                     ║
║ Experiência ............... +800    ║
║ Prudência ................. +25     ║
║ Conhecimento .............. +30     ║
║                                     ║
║ SKILL DESBLOQUEADA:                 ║
║ "NÃO FAÇA ESSA MERDA DE NOVO"       ║
╚═════════════════════════════════════╝

Essa skill é extremamente poderosa.

Algumas das minhas maiores forças profissionais nasceram de coisas que deram errado.

Uma vitória ensina:

funcionou.

Uma derrota obriga a perguntar:

por quê?

E essa pergunta pode valer muito XP.


12. Cada empresa era uma nova dungeon

Então comecei a descobrir um mundo que minha pirâmide de papel jamais conseguiria representar.

Novos lugares.

Novas pessoas.

Novas tecnologias.

Novos problemas.

Novas culturas empresariais.

Chefes excelentes.

Chefes nem tanto.

Colegas brilhantes.

Situações absurdas.

Cada novo ambiente acrescentava alguma coisa ao inventário.

E descobri outra coisa importante:

quando você muda de fase, não perde o XP das fases anteriores.

Eu podia ser iniciante numa nova tecnologia.

Mas não era mais iniciante em aprender.

Podia não conhecer determinado ambiente.

Mas já sabia observar.

Podia enfrentar um problema que nunca tinha visto.

Mas carregava comigo todos os problemas anteriores.

Progressivamente minha confiança deixou de ser:

“Eu sei fazer isso.”

E passou a ser:

“Eu ainda não sei fazer isso, mas provavelmente consigo aprender.”

Esse ainda vale uma fortuna.


13. A fabricação do conjunto de mithril

Ninguém apareceu oferecendo:

PARABÉNS! VOCÊ RECEBEU ARMADURA DE MITHRIL +10.

Ela foi sendo construída.

Uma peça de cada vez.

EXPERIÊNCIA PROFISSIONAL ......... +5
FACULDADE ........................ +5
NOVA TECNOLOGIA .................. +3
NOVO EMPREGO ..................... +4
PROBLEMA RESOLVIDO ............... +7
ERRO COMETIDO .................... +6
ERRO COMPREENDIDO ................ +12
CHEFE DIFÍCIL .................... +4
MENTOR EXCELENTE ................. +15
PROJETO COMPLICADO ............... +10
MADRUGADA EM PRODUÇÃO ............ +20
SOC7 ÀS TRÊS DA MANHÃ ............ ITEM RARO

Até que um dia você olha para trás e percebe:

caramba, estou usando mithril.

Mas existe uma surpresa.

O conjunto nunca fica realmente pronto.

Sempre aparece um monstro novo capaz de fazer você olhar para sua espada e pensar:

— Será que aguenta?

A diferença é que agora você possui cicatrizes suficientes para responder:

— Não sei. Mas já enfrentei coisa pior.


14. A pirâmide virou mapa

Na CESP, minha carreira era vertical.

             [ FUTURO ]
                ▲
            [ CARGO ]
                ▲
          [ ANALISTA I ]
                ▲
      [ TÉCNICO NÍVEL IV ]

Era uma excelente estrutura.

Depois de 1995, aquilo deixou de representar minha vida.

A pirâmide virou mapa.

E mapa é muito mais bagunçado.

Existem atalhos.

Montanhas.

Pântanos.

Pontes quebradas.

Cidades inesperadas.

Lugares aos quais você nunca deveria ter ido.

Outros dos quais jamais deveria ter saído.

E enormes áreas marcadas:

HERE BE DRAGONS.

O mais interessante é que cada nova conquista aumentava minha disposição para explorar.

Eu comecei a sonhar mais alto.


15. Dobrar a aposta

Primeiro, a pergunta era:

Consigo sobreviver fora da CESP?

Depois:

Consigo trabalhar em outro lugar?

Depois:

Consigo aprender outra tecnologia?

Depois:

Consigo entrar em outro setor?

Depois:

Consigo recomeçar?

E cada resposta positiva aumentava o tamanho da próxima pergunta.

As derrotas também ajudavam.

Porque depois de cair algumas vezes você aprende uma habilidade que não aparece em currículo:

levantar.

Então comecei a dobrar a aposta.

Outra aventura.

Outra.

Mais uma.

Até que, sete anos depois daquela carta, apareceu uma pergunta muito maior:

E se eu atravessar o Atlântico?


16. 2002 — Cumbica

Há momentos que dividem uma vida em duas partes.

Para mim, um deles aconteceu em 1995.

Outro aconteceu em 2002.

Aeroporto Internacional de São Paulo.

Cumbica.

Bagagem.

Passaporte.

Painel de partidas.

Europa.

Se em 1995 eu havia abandonado um navio, em 2002 estava literalmente embarcando para outro mundo.

Minha próxima dungeon ficava do outro lado do Atlântico.

E gosto de imaginar que, naquele instante, dentro da minha bagagem existia uma coisa invisível.

Aquela velha pirâmide da CESP.

Não necessariamente a folha física.

Mas tudo que ela representava.

Disciplina.

Planejamento.

Ambição.

Estudo.

Vontade de crescer.

O erro seria imaginar que abandonar a pirâmide significou abandonar essas características.

Foi justamente o contrário.

Eu levei tudo comigo.


17. Easter egg — a folha era pequena demais

Existe um pequeno easter egg nessa história.

Quando jovem, tentei desenhar meu futuro numa folha de papel.

E fiz corretamente.

Coloquei cargos.

Anos.

Conhecimentos.

Requisitos.

Estudos.

O problema não estava no planejamento.

O problema era outro.

A folha era pequena demais.

A Europa não cabia nela.

As futuras empresas não cabiam.

As tecnologias que ainda nem existiam não cabiam.

As pessoas que conheceria não cabiam.

As batalhas perdidas não cabiam.

As vitórias improváveis não cabiam.

O velho professor barbudo também não cabia.

E talvez essa seja uma das coisas mais importantes que um jovem programador pode aprender.


18. Planeje sua carreira — mas não adore o plano

Faça sua pirâmide.

Eu faria novamente.

Defina onde deseja chegar.

Descubra os requisitos.

Estude.

Construa experiência.

Calcule aproximadamente o tempo.

Procure mentores.

Conquiste seus níveis.

Mas periodicamente faça uma pergunta:

As premissas que usei para construir este plano continuam verdadeiras?

Programadores conhecem isso perfeitamente.

Um algoritmo pode estar correto e mesmo assim produzir uma solução inútil se os requisitos mudaram.

Carreira também sofre mudança de requisito.

Não confunda persistência com obrigação de continuar executando um plano cuja realidade mudou.

Ao mesmo tempo, não transforme minha história numa recomendação irresponsável para pedir demissão amanhã.

Eu tinha contexto.

Havia um PDV.

Havia indenização.

Eu estudava.

Tinha experiência.

Pensei bastante.

Tinha medo.

E possuía responsabilidades.

Coragem não é apertar DELETE em produção sem backup.

Isso se chama outra coisa.


19. E aqueles que ficaram?

Anos depois, parte das incertezas daquele período realmente se materializou.

O setor elétrico paulista passou por profunda reorganização. O processo de privatização avançou, empresas e ativos foram separados e vendidos; em 1997 ocorreu a privatização da CPFL, e em 1998 a reorganização do setor paulista avançou ainda mais. Estudos históricos do BNDES situam 1998 como um ano particularmente importante para as privatizações das concessionárias paulistas.

Alguns colegas que haviam criticado minha escolha acabaram enfrentando posteriormente desligamentos sem uma oportunidade equivalente àquela que eu havia aceitado.

Isso significa que eu era um gênio?

Não.

Significa que risco existe dos dois lados.

Essa talvez tenha sido uma das minhas primeiras grandes lições profissionais.

Ficar também é uma decisão.

Segurança absoluta frequentemente é apenas risco que aprendemos a não enxergar.


20. O verdadeiro conjunto de mithril

Trinta e um anos depois, finalmente consigo explicar ao garoto de 1995 uma coisa.

Ele estava fazendo a pergunta errada.

Ele perguntava:

“Minha espada é de mithril?”

Não era.

O mithril não estava na espada.

Estava sendo produzido nele.

Cada lugar.

Cada pessoa.

Cada professor.

Cada mentor.

Cada tecnologia.

Cada erro.

Cada acerto.

Cada viagem.

Cada medo vencido.

Cada boleto pago.

Cada situação em que tudo parecia perdido e, de alguma maneira, apareceu uma saída.

Isso formou a armadura.

A habilidade mais importante nunca foi conhecer uma determinada linguagem, sistema operacional ou tecnologia.

Foi descobrir:

eu consigo aprender novamente.

Porque tecnologias envelhecem.

Empresas desaparecem.

Produtos são descontinuados.

Mercados mudam.

Cargos mudam de nome.

O programador que constrói sua identidade exclusivamente sobre aquilo que conhece hoje corre um risco enorme.

O verdadeiro mithril é a capacidade de reconstruir o personagem.


Epílogo — Eu sou um Bellacosa

Voltemos a agosto de 1995.

Um garoto de 21 anos segura uma carta.

Atrás dele estão seis anos de Fundação CESP.

Técnico Nível IV.

Terceiro ano da faculdade.

Analista I esperando pelo diploma.

Uma pirâmide de cargos cuidadosamente desenhada.

Um mentor dizendo para ficar.

Uma família dizendo que aquilo era loucura.

O pai da Cris dizendo que aquele rapaz não tinha juízo.

Na frente existe neblina.

Nenhuma garantia.

Nenhum walkthrough.

Nenhum savegame.

Nenhum spoiler.

Apenas uma espada cuja resistência ele desconhece.

E o Big Boss Boleto esperando pacientemente pelo próximo mês.

O garoto assina.

COMMIT.

Agora imagine o velho professor barbudo aparecendo discretamente naquela sala.

Ele não pode revelar o futuro.

Seria trapaça.

Portanto não diz:

“Vai dar certo.”

Também não diz:

“Você chegará à Europa.”

Não conta sobre as empresas.

Não conta sobre as viagens.

Não conta sobre os computadores.

Não conta sobre os alunos.

Não conta sobre as histórias que um dia aquele garoto escreverá.

Apenas olha para a espada.

Dá uma tragada no cachimbo.

E diz:

— Ela ainda não é de mithril.

O garoto empalidece.

— Então estou ferrado?

O velho sorri.

— Não. Você entendeu errado.

Aponta para a estrada.

O mithril está lá.

E desaparece.

O garoto continua sem saber se tomou a decisão correta.

Mas segue.

Em cada aventura aprende alguma coisa.

Vence batalhas.

Perde outras.

Ganha XP.

Adquire equipamentos.

Troca de classe algumas vezes.

Descobre novos mapas.

E cada conquista lhe dá força para sonhar um pouco mais alto.

Até que chega 2002.

Cumbica.

Painel de partidas.

Europa.

O garoto que um dia desenhou uma pirâmide percebe que agora possui um planeta inteiro diante dele.

Pega a bagagem.

Caminha em direção ao portão.

Talvez aqueles supostos normandos da árvore genealógica tenham dado uma risadinha em algum lugar.

Talvez os antigos imigrantes Bellacosa tenham reconhecido a cena.

Porque algumas famílias deixam propriedades.

Outras deixam dinheiro.

Outras deixam títulos.

Talvez a minha tenha deixado outra coisa:

a curiosidade de descobrir o que existe depois da borda do mapa.

Em 1995 eu queimei meu navio.

Passei os anos seguintes construindo outro enquanto enfrentava o Big Boss Boleto e perguntava se minha espada aguentaria.

Em 2002, dobrei novamente a aposta e atravessei o Atlântico.

Hoje percebo que nunca encontrei o navio definitivo.

Ainda bem.

Porque talvez a maior conquista daquela decisão não tenha sido descobrir um porto seguro.

Foi descobrir que, se for necessário, sei construir outro barco.

E quando alguém perguntar por que um rapaz com seis anos de empresa, Técnico Nível IV, faculdade em andamento e Analista I quase desbloqueado resolveu abandonar uma carreira que estava funcionando, talvez eu finalmente tenha uma resposta.

Não é particularmente racional.

Também não cabe numa planilha.

Mas cabe perfeitamente nesta história:

Eu sou um Bellacosa.

Nós temos uma certa dificuldade histórica em acreditar que o mundo termina onde acaba o mapa.



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...