OpenEdge ABL Linter & Remote CompilerExtensão para Visual Studio Code que oferece análise estática de código OpenEdge ABL (Progress) em tempo real e compilação remota de arquivos 📋 Índice
✨ Funcionalidades🔍 Linter Estático (ABL)
🔨 Compilação Remota
📦 Destinos Flexíveis e Inteligentes para os
|
| Opção | Descrição |
|---|---|
| 🏠 Workspace Local | Salva na estrutura de pastas do projeto, mantendo o caminho original (com src/) |
| 🖥️ Servidor Cadastrado | Salva em um servidor previamente configurado (Linux ou Windows), podendo possuir um banco de preferência associado |
| 📁 Selecionar Pasta... | Abre o seletor de pasta do sistema (uso único, não salva) |
| ➕ Configurar Novo Servidor... | Adiciona o servidor permanentemente à lista, permitindo definir seu banco de preferência |
⚙️ Gerenciamento de Servidores de Destino
- Adicionar, editar e remover servidores com interface guiada
- Seleção de pasta via diálogo gráfico ou digitação manual (para caminhos UNC Windows
\\servidor\share) - Suporte a servidores por plataforma: Linux 🐧, Windows 🪟 ou Ambas 🌐
- Cada usuário vê apenas os servidores compatíveis com seu sistema operacional
- Configuração armazenada em arquivo JSON dedicado, separado do
settings.jsondo VSCode
📌 Pré-requisitos
Cliente (VSCode)
- Visual Studio Code
>= 1.85.0 - Workspace aberto (pasta de projeto)
- Os arquivos-fonte ABL devem estar dentro de uma pasta
src/na raiz do workspace
Servidor de Compilação
- Node.js
>= 18 - OpenEdge / Progress instalado na máquina do servidor
- Variável de ambiente
DLCapontando para o diretório de instalação do Progress- Windows:
C:\dlc128(ou o caminho correto da sua instalação) - Linux:
/usr/dlc(ou equivalente)
- Windows:
🚀 Instalação
1. Instalar a extensão no VSCode
# Baixe a versão mais recente (.vsix) direto do GitHub:
# https://github.com/DouglasBgs/Progress-compiler-tools/releases
# No VSCode: Extensions (Ctrl+Shift+X) → ··· → Install from VSIX...
🔗 Repositório e CI/CD
O projeto conta com automação completa de versionamento e release via GitHub Actions.
Ciclo de Release (Patch Automático)
Sempre que um novo commit é enviado para a branch main:
- Versionamento: O número da versão é incrementado automaticamente no
package.json(ex:0.0.1→0.0.2). - Tagging: Uma nova tag de versão (ex:
v0.0.2) é criada no repositório. - Build: O pacote
.vsixé gerado utilizando Node.js 24. - Deploy: Uma nova Release é publicada automaticamente no GitHub contendo o arquivo de instalação.
🔗 Repositório Oficial: GitHub - DouglasBgs/Progress-compiler-tools
2. Instalar e iniciar o Servidor de Compilação
O servidor de compilação é um processo Node.js separado que deve rodar na máquina onde o OpenEdge está instalado.
# Acesse a pasta do servidor
cd compile-server
# Instale as dependências
npm install
# Configure o ambiente (veja a seção abaixo)
# Edite o arquivo .env com seus valores
# Build de produção
npm run build
# Inicie o servidor
npm start
# OU inicie em modo desenvolvimento (com ts-node, sem build)
npm run dev
🖥️ Configuração do Servidor de Compilação
Arquivo .env
Localizado em compile-server/.env:
# Porta em que o servidor vai escutar
PORT=8080
# Caminho de instalação do OpenEdge/Progress (DLC)
# Windows:
DLC=C:\dlc128
# Linux:
# DLC=/usr/dlc
Arquivo server.config.json
Localizado em compile-server/server.config.json. Define os parâmetros de conexão para cada banco de dados suportado. Cada banco precisa de um arquivo .pf (parameter file) e opcionalmente um .ini.
Os caminhos de .pf e .ini suportam o placeholder {repository}, que será substituído dinamicamente pelo repositório de compilação enviado pela extensão (ex: EMS2.08, CRM, etc.).
{
"defaultRepository": "EMS2.08",
"databases": {
"Progress": {
"pf": "\\\\meu-servidor\\compilacao\\{repository}\\connect.pf",
"ini": "\\\\meu-servidor\\compilacao\\{repository}\\progress.ini"
},
"SQL Server": {
"pf": "\\\\meu-servidor\\compilacao\\sql\\{repository}\\connect.pf",
"ini": "\\\\meu-servidor\\compilacao\\sql\\{repository}\\progress.ini"
},
"Oracle": {
"pf": "\\\\meu-servidor\\compilacao\\oracle\\{repository}\\connect.pf",
"ini": "\\\\meu-servidor\\compilacao\\oracle\\{repository}\\progress.ini"
}
},
"patchConfig": {
"baseDir": "\\\\meu-servidor\\arquivos\\patches",
"baseShortcut": "\\\\meu-servidor\\arquivos\\atalhos"
}
}
| Campo | Descrição |
|---|---|
defaultRepository |
Repositório padrão utilizado quando a extensão não envia o campo (retrocompatibilidade). |
{repository} |
Placeholder que será substituído pelo valor do repositório escolhido na extensão. |
Importante: Apenas os bancos configurados aqui estarão disponíveis para seleção no VSCode. A chave
patchConfigé obrigatória caso deseje utilizar a compilação no modo Patch.
Funcionamento do patchConfig
O modo Patch resolve caminhos dinamicamente com base na versão informada.
- baseDir: Diretório raiz onde os patches estão descompactados.
- baseShortcut: Diretório onde estão os arquivos de configuração (.ini) dos ambientes.
A lógica de busca de arquivos segue o padrão:
- PF:
{baseDir}/{patchVersion}/{subType}/connect-ems2.pf - INI:
{baseShortcut}/{versao_reduzida}/{subType}/{repository}/progress-12.ini
O valor de
{repository}é dinâmico e depende da configuração da extensão.
Scripts disponíveis no servidor
| Script | Descrição |
|---|---|
npm run dev |
Execução em desenvolvimento (ts-node, sem build) |
npm run build |
Compila TypeScript para dist/ |
npm start |
Inicia a partir do build compilado (dist/server.js) |
npm run watch |
Assiste e recompila TypeScript automaticamente |
⚙️ Configuração da Extensão no VSCode
URL do Servidor de Compilação
Na primeira vez que você acionar a compilação remota, a extensão solicitará automaticamente o URL do servidor:
http://ip-do-servidor:8080/compile
Ou configure manualmente via Arquivo → Preferências → Configurações:
{
"abl-linter.compilerUrl": "http://meu-servidor:8080/compile"
}
O URL é salvo globalmente no
settings.jsondo usuário e funciona em qualquer workspace.
Linting em Tempo Real
Por padrão, a extensão analisa o código automaticamente ao abrir e salvar arquivos ABL. Para desabilitar essa análise em tempo real, defina a configuração:
{
"abl-linter.enableRealTimeLinting": false
}
| Configuração | Tipo | Padrão | Descrição |
|---|---|---|---|
abl-linter.compilerUrl |
string |
"" |
URL do servidor de compilação ABL |
abl-linter.enableRealTimeLinting |
boolean |
true |
Habilita/desabilita a correção de código em tempo real |
abl-linter.enableCompilationRepository |
boolean |
false |
Habilita a seleção do repositório de compilação |
abl-linter.compilationRepository |
string |
"EMS2.08" |
Repositório preferido (ex: EMS2, CRM, etc.) |
Repositório de Compilação
Para utilizar diferentes repositórios de compilação (como CRM, EMS5, etc.), você deve habilitar a configuração enableCompilationRepository. Quando habilitada, a extensão enviará o valor de compilationRepository para o servidor.
| Repositório | Descrição |
|---|---|
| EMS2 | EMS 2.08 (Padrão) |
| CRM | CRM |
| EMS5 | EMS 5.08 |
| ... | ... |
⚠️ Retrocompatibilidade: Se
enableCompilationRepositoryestiver desabilitado, a extensão não enviará o repositório, e o servidor usará o valor padrão definido emdefaultRepository(ouEMS2.08).
A alteração é reativa: ao desabilitar, todos os diagnósticos são limpos imediatamente; ao reabilitar, todos os arquivos ABL abertos são reanalisados — sem necessidade de recarregar o VSCode.
📖 Como Usar
Linter em Tempo Real
O linter é ativado automaticamente ao abrir ou salvar qualquer arquivo com extensão .p, .py, .w, .cls ou .i. Os erros aparecem na aba Problems (Ctrl+Shift+M) do VSCode.
Nenhuma configuração adicional é necessária para começar a usar.
💡 Dica: Caso o linting em tempo real esteja impactando a performance ou não seja desejado, é possível desabilitá-lo via configuração
abl-linter.enableRealTimeLinting. Consulte a seção Configuração da Extensão no VSCode para mais detalhes.
Compilação Remota
Opção 1: Menu de Contexto (Explorer)
- Selecione um ou mais arquivos
.p/.py/.w/.cls/.ino Explorer
(useCtrl+Clickpara selecionar múltiplos) - Clique com o botão direito → ABL Compilar
- Siga o assistente guiado
Opção 2: Tecla de Atalho F5
- Com um arquivo ABL aberto e focado no editor, pressione
F5 - O arquivo atual será enviado para compilação
Fluxo do Assistente (Ordem Atualizada)
Para agilizar o fluxo, agora você informa primeiro o destino da compilação. Se o destino possuir um banco preferencial pré-configurado, a compilação ocorre instantaneamente sem novas perguntas!
┌────────────────────────────────────────────────┐
│ 1. Onde salvar os arquivos .r? │
│ ○ 🏠 Workspace Local │
│ ○ 🖥️ 🐧 Servidor Linux /mnt/prod/bin │
│ ○ 🖥️ 🪟 Servidor Windows \\srv\hom\bin │
│ ○ 📁 Selecionar Pasta... │
│ ○ ➕ Configurar Novo Servidor... │
└────────────────────────────────────────────────┘
↓ (Se o servidor NÃO tiver banco padrão configurado)
┌────────────────────────────────────────────────┐
│ 2. Selecione o Banco de Dados │
│ ○ Progress │
│ ○ SQL Server │
│ ○ Oracle │
│ ○ Patch │
└────────────────────────────────────────────────┘
Estrutura de Pastas do Workspace
⚠️ Importante: Os arquivos-fonte ABL precisam estar obrigatoriamente dentro de uma pasta
src/na raiz do workspace para que a compilação funcione corretamente.
A extensão utiliza a pasta src/ como referência para montar os caminhos de compilação e destino dos binários .r. A estrutura esperada é:
meu-projeto/ ← Workspace aberto no VSCode
├── src/ ← Pasta obrigatória para os fontes
│ ├── modulo-a/
│ │ ├── programa1.p
│ │ └── programa2.w
│ ├── modulo-b/
│ │ ├── classe.cls
│ │ └── include.i
│ └── utils/
│ └── helper.p
└── ...
Arquivos fora da pasta src/ não serão reconhecidos pela compilação remota.
Comportamento do caminho dos arquivos .r
Após a compilação, o destino dos binários .r varia conforme a opção escolhida:
| Destino | Exemplo de entrada | Exemplo de saída .r |
|---|---|---|
| Workspace Local | src/modulo/programa.p |
src/modulo/programa.r |
| Servidor Externo | src/modulo/programa.p |
modulo/programa.r (sem prefixo src/) |
O prefixo
src/é removido automaticamente ao enviar para servidores externos, permitindo deploy direto na estrutura de produção.
Compilação de Múltiplos Fontes
A extensão suporta a compilação em lote de múltiplos arquivos-fonte selecionados diretamente pelo Explorer do VSCode.
Como usar
- No Explorer do VSCode, selecione os arquivos desejados:
- Mantenha
Ctrlpressionado e clique em cada arquivo para seleção individual - Ou use
Shift+Clickpara selecionar um intervalo contínuo de arquivos
- Mantenha
- Clique com o botão direito sobre a seleção
- Selecione ABL Compilar no menu de contexto
- Escolha o destino dos
.re o banco de dados normalmente
Todos os arquivos selecionados serão enviados ao servidor de compilação em uma única requisição, otimizando o tempo total de compilação.
Extensões suportadas para seleção múltipla
| Extensão | Tipo |
|---|---|
.p |
Procedure |
.py |
Código / Script (.py) |
.w |
Window / Persistent Procedure |
.cls |
Classe ABL |
.i |
Include |
Compilação via Git (Source Control)
Além do Explorer, é possível compilar fontes diretamente pela aba de Source Control (Git) do VSCode. Isso é especialmente útil para compilar rapidamente os arquivos que foram modificados no controle de versão.
Como usar
- Abra a aba Source Control (
Ctrl+Shift+G) - Na seção Changes, selecione os arquivos que deseja compilar:
- Clique no arquivo para selecionar um único fonte
- Use
Ctrl+Clickpara selecionar múltiplos arquivos modificados
- Clique com o botão direito sobre a seleção
- Selecione ABL Compilar no menu de contexto
- Siga o assistente normalmente (destino dos
.r→ banco de dados se necessário)
O botão ABL Compilar também aparece como um ícone inline ao lado de cada arquivo na lista de mudanças, permitindo compilar rapidamente um único fonte com um clique.
Cenários de uso
| Cenário | Ação |
|---|---|
| Compilar um fonte modificado | Clique no ícone inline ao lado do arquivo na aba Git |
| Compilar vários fontes alterados | Selecione múltiplos com Ctrl+Click → botão direito → ABL Compilar |
| Compilar todas as mudanças | Clique direito no grupo Changes → ABL Compilar |
Compilação de Patches
Ideal para compilar correções pontuais em ambientes de patch específicos sem precisar configurar cada banco manualmente no servidor.
- Acione a compilação remota (
F5ou Menu de Contexto). - Selecione um destino sem banco de preferência associado (ex: Workspace Local ou um Servidor sem banco padrão).
- Selecione a opção Patch na lista de Bancos de Dados.
- Informe a Versão do Patch (Ex:
12.1.2024.1).- A extensão lembrará da última versão informada para facilitar.
- Selecione o Tipo de Banco (Progress, SQL Server ou Oracle).
O servidor então localizará os arquivos .pf e .ini correspondentes na estrutura de diretórios configurada no patchConfig.
---�as, permitindo compilar rapidamente um único fonte com um clique.
Cenários de uso
| Cenário | Ação |
|---|---|
| Compilar um fonte modificado | Clique no ícone inline ao lado do arquivo na aba Git |
| Compilar vários fontes alterados | Selecione múltiplos com Ctrl+Click → botão direito → ABL Compilar |
| Compilar todas as mudanças | Clique direito no grupo Changes → ABL Compilar |
Compilação de Patches
Ideal para compilar correções pontuais em ambientes de patch específicos sem precisar configurar cada banco manualmente no servidor.
- Acione a compilação remota (
F5ou Menu de Contexto). - Selecione a opção Patch na lista de Bancos de Dados.
- Informe a Versão do Patch (Ex:
12.1.2024.1).- A extensão lembrará da última versão informada para facilitar.
- Selecione o Tipo de Banco (Progress, SQL Server ou Oracle).
O servidor então localizará os arquivos .pf e .ini correspondentes na estrutura de diretórios configurada no patchConfig.
Gerenciar Servidores de Destino
Acesse via Paleta de Comandos (Ctrl+Shift+P):
OpenEdge ABL: Gerenciar Servidores de Destino
➕ Adicionar Servidor
- Selecione Adicionar Novo Servidor
- Informe o nome (ex:
Produção,Homologação) - Escolha a plataforma de visibilidade:
| Opção | Quem vê |
|---|---|
| 🐧 Linux | Apenas usuários com VSCode no Linux |
| 🪟 Windows | Apenas usuários com VSCode no Windows |
| 🌐 Ambas | Todos os usuários |
- Informe o caminho de destino:
- Selecionar Pasta → abre o explorador de arquivos nativo do sistema operacional
- Digitar Caminho → digitação manual (necessário para caminhos UNC:
\\servidor\share\bin)
✏️ Editar Servidor
- Selecione Editar Servidor
- Escolha o servidor na lista
- Atualize nome, plataforma e/ou caminho
🗑️ Remover Servidor
- Selecione Remover Servidor
- Marque um ou mais servidores com
Espaço(seleção múltipla) - Pressione
Enterpara confirmar
📄 Edição Manual do JSON
- Selecione Abrir Arquivo de Configuração
- O arquivo
servers.jsonabrirá diretamente no editor para edição livre
💾 Estrutura de Armazenamento de Servidores
Os servidores são armazenados em um arquivo dedicado da extensão, completamente separado do settings.json do VSCode:
Linux: ~/.config/Code/User/globalStorage/douglasbarbosa.openedge-abl-linter/servers.json
Windows: %APPDATA%\Code\User\globalStorage\douglasbarbosa.openedge-abl-linter\servers.json
Formato do servers.json
[
{
"name": "Produção Linux",
"path": "/mnt/producao/bin",
"platform": "linux"
},
{
"name": "Servidor App Windows",
"path": "\\\\servidor\\share\\bin",
"platform": "windows"
},
{
"name": "Homologação",
"path": "/mnt/homologacao/bin",
"platform": "any"
}
]
| Campo | Tipo | Valores | Descrição |
|---|---|---|---|
name |
string | — | Nome de exibição do servidor |
path |
string | — | Caminho absoluto do diretório de destino |
platform |
string | linux | windows | any |
Sistema operacional que verá este servidor |
📟 Comandos Disponíveis
| Paleta de Comandos | ID interno | Descrição |
|---|---|---|
OpenEdge ABL: ABL Compilar |
abl-linter.compileRemote |
Compila arquivo(s) selecionado(s) ou aberto no editor |
OpenEdge ABL: Gerenciar Servidores de Destino |
abl-linter.manageServers |
Abre o gerenciador de servidores |
⌨️ Atalhos de Teclado
| Atalho | Ação | Condição |
|---|---|---|
F5 |
Compilar arquivo ABL ativo | Editor com arquivo .p, .w ou .cls focado |
Para personalizar:
Ctrl+K Ctrl+S→ pesquise porabl-linter.compileRemote
🗂️ Estrutura do Projeto
/
├── src/ # Código-fonte da extensão VSCode
│ ├── extension.ts # Ponto de entrada (activate/deactivate)
│ ├── diagnostics.ts # Motor do linter estático ABL
│ ├── config/
│ │ └── serversConfig.ts # Gerenciador do arquivo servers.json
│ ├── commands/
│ │ ├── remoteCompile.ts # Comando de compilação remota
│ │ └── manageServers.ts # Comando de gerenciamento de servidores
│ └── rules/ # Regras individuais do linter ABL
│
├── compile-server/ # Servidor de compilação Node.js (separado)
│ ├── src/
│ │ └── server.ts # API Express + integração com Progress
│ ├── server.config.json # Configuração dos bancos de dados
│ ├── .env # Porta e caminho DLC
│ └── package.json
│
├── package.json # Manifesto da extensão VSCode
└── language-configuration.json # Configuração da linguagem ABL
🔄 Fluxo Completo de Compilação
VSCode (Cliente) Servidor (Node.js + Progress)
──────────────────────────────── ─────────────────────────────────────
1. Seleciona arquivo(s) ABL
2. Escolhe banco de dados
3. Lê arquivo(s) em disco → Base64
4. POST /compile ──────────────────────→ Recebe payload JSON
5. Cria pasta temp/UUID/
6. Desempacota os fontes
7. Gera _mass_compile.p dinamicamente
8. Executa:
prowin -b -pf connect.pf -p _mass_compile.p
9. Lê compile_report.json gerado
10. Coleta binários .r de resultado/
11. Remove pasta temp/UUID/
←──────────────────── 12. Retorna { compiledFiles[], errors[] }
13. SE erros → exibe no Output
SE sucesso → pergunta destino
14. Grava .r no destino escolhido
🔍 Regras do Linter
| Regra | Severidade | Descrição |
|---|---|---|
| Falta de ponto final | 🔴 Error | Statements que não terminam com . |
| Blocos END desbalanceados | 🔴 Error | Blocos DO, FOR, REPEAT sem END correspondente |
| IF sem THEN | 🔴 Error | IF sem a palavra-chave THEN |
| Variável não definida | 🟡 Warning | Variáveis usadas sem DEFINE VARIABLE ou VAR |
| String não fechada | 🔴 Error | Aspas abertas sem fechamento |
| = em condição | 🟡 Warning | Uso de = em vez de EQ em IF/WHERE |
| FIND sem NO-ERROR | 🟡 Warning | FIND sem tratamento NO-ERROR |
| DO vazio | 🔴 Error | Blocos DO: seguidos imediatamente de END. |
| FOR EACH sem lock explícito | 🟡 Warning | FOR EACH/FIRST/LAST sem NO-LOCK, SHARE-LOCK ou EXCLUSIVE-LOCK |
| CASE sem WHEN | 🔴 Error | CASE sem nenhuma cláusula WHEN |
| DEFINE VARIABLE sem NO-UNDO | 🟡 Warning | DEFINE VARIABLE sem a flag NO-UNDO |
| DELETE OBJECT sem NO-ERROR | 🟡 Warning | DELETE OBJECT sem tratamento de erro |
| CASE sem OTHERWISE | 🔵 Info | Sugestão de adicionar OTHERWISE em blocos CASE |
| FUNCTION sem RETURN | 🟡 Warning | FUNCTION sem statement de RETURN |
| RUN sem NO-ERROR | 🟡 Warning | RUN de procedures sem NO-ERROR |
| CAN-FIND com EXCLUSIVE-LOCK | 🔴 Error | EXCLUSIVE-LOCK inválido dentro de CAN-FIND |
| MESSAGE sem VIEW-AS | 🔵 Info | MESSAGE sem VIEW-AS ALERT-BOX |
| Falta de Diretiva de Erro | 🟡 Warning | Ausência de BLOCK-LEVEL/ROUTINE-LEVEL ON ERROR UNDO, THROW |
🛠️ Solução de Problemas
❌ "Falha na Compilação Remota: connect ECONNREFUSED"
O servidor de compilação não está acessível. Verifique:
- O processo
node dist/server.jsestá rodando na máquina servidor - A porta
8080(ou configurada no.env) está liberada no firewall - O URL em
abl-linter.compilerUrlestá correto (sem barra no final)
❌ "O banco de dados 'X' não está mapeado no server.config.json"
O server.config.json não possui a chave para o banco selecionado. Edite o arquivo no servidor e adicione a configuração correspondente.
❌ Compilador Progress não encontrado
Defina a variável DLC no sistema ou no .env do servidor:
DLC=C:\dlc128 # Windows
DLC=/usr/dlc # Linux
❌ Servidores não aparecem após reiniciar o VSCode
Verifique se o arquivo servers.json existe e está acessível:
- Linux:
~/.config/Code/User/globalStorage/douglasbarbosa.openedge-abl-linter/servers.json - Windows:
%APPDATA%\Code\User\globalStorage\douglasbarbosa.openedge-abl-linter\servers.json
Use OpenEdge ABL: Gerenciar Servidores de Destino → Abrir Arquivo de Configuração para inspecionar o arquivo diretamente.
❌ Arquivo .i não aparece no menu de contexto
O menu de contexto do Explorer suporta .p, .w, .cls e .i. Certifique-se de que a extensão está ativada (abra qualquer arquivo .p para forçar a ativação).
🧑💻 Desenvolvimento
# Instalar dependências da extensão
cd /raiz-do-projeto
npm install
# Compilar extensão
npm run compile
# Modo watch (recompila automaticamente)
npm run watch
# Abrir no Extension Development Host
# Pressione F5 no VSCode com o projeto aberto
📄 Licença
Este projeto está licenciado sob a Licença MIT — consulte o texto abaixo para mais detalhes.
Licença MIT
Copyright (c) 2026 Douglas Barbosa
A permissão é concedida, gratuitamente, a qualquer pessoa que obtenha uma cópia
deste software e dos arquivos de documentação associados (o "Software"), para
lidar com o Software sem restrições, incluindo, sem limitação, os direitos de
usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender
cópias do Software, e permitir que as pessoas a quem o Software é fornecido o
façam, sujeitas às seguintes condições:
O aviso de copyright acima e este aviso de permissão devem ser incluídos em
todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU
IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO,
ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM NENHUM CASO OS AUTORES OU
TITULARES DOS DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO,
DANOS OU OUTRA RESPONSABILIDADE, SEJA EM AÇÃO CONTRATUAL, DELITUAL OU DE OUTRA
FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS
NEGOCIAÇÕES NO SOFTWARE.