Monday, July 02, 2007

O caso OOXML na ISO

Alberto Barrionuevo me enviou um documento que está circulando na Europa analisando a proposta do OOXML. Trata-se de uma primeira análise, mas ela já demonstra que o chamado padrão OOXML não é um padrão, mas uma junção de pedaços de soluções muitas vezes reunidas de modo incoerente e inconsistente. Falta traduzir ainda um terço do texto. Amanhã colocarei a parte final do documento. Podemos notar que o OOXML é um anti-padrão (com 6 mil páginas).
Acompanhe o site http://www.openxml.info/


O caso OOXML na ISO

Neste informe se discute porque o formato ISO DIS 29500, “Office Open XML” (OOXML), não cumpre com os critérios definidos pela ISO para poder converter-se em uma norma internacional. Este informe analisa uma reduzida seleção das centenas de impedimentos sérios e concretos que durante nossos estudos temos encontrado e documentado nas mais de 6000 páginas de especificação do OOXML. Por favor, solicite-nos a lista completa se for de seu interesse.


1.Critérios para a avaliação de padrões

O que é um padrão? Existem várias definições relevantes. Esta é a oficial da ISO:

“[Um] documento, estabelecido por consenso e aprovado por um organismo reconhecido que estabeleça, para efeitos de um uso comum e repetitivo, normas, diretrizes ou pautas destinadas a atividades ou seus resultados, cujo objetivo seja lograr um nível ótimo de ordenamento em um contexto determinado.

NOTA. As normas devem basear-se em resultados consolidados da ciência, da tecnologia e da experiência, e seu objetivo é a promoção do benefício ótimo para a comunidade.”1

Segundo o Instituto Britânico de Padrões (BSI):

“... uma norma é uma forma acordada e reprodutível de realizar algo. É um documento publicado que contém as especificações técnicas e outros critérios precisos desenhados para utilizar-se de maneira consistente como regra, pauta ou definição. As normas ajudam a simplificar a vida e aumentar a confiabilidade e eficácia de numerosos bens e serviços que utilizamos comumente. Pretendem ser parâmetros de excelência, ou seja, um compendio de boas e melhores práticas, e não de práticas gerais. As normas surgem a partir da união da experiência e da idoneidade de todas as partes interessadas, tais como os produtores, vendedores, compradores, usuários e reguladores de um material, produto, processo ou serviço particular”.2

Segundo as diretivas do Comitê Técnico Conjunto N.º 1 (JTC1) de ISO/IEC:

“Um dos propósitos da normalização da tecnologia da informação é assegurar que os produtos disponíveis no mercado possuam características de interoperabilidade, capacidade de transferência e de adaptação cultural e lingüística. Por tanto, as normas desenvolvidas deverão refletir os requisitos com as seguintes características estratégicas comuns:

interoperabilidade,
capacidade de transferência,
capacidade de adaptação cultural e lingüística”.3

Destas e outras definições nacionais surgem temas comuns acerca do que as normas deveriam obter:

1. Definem um critério comum e preciso para realizar algo de maneira reprodutível.
2. Proporcionam um nível ótimo de ordem em um contexto dado, pretendem ser parâmetros de la excelência ao brindar os resultados consolidados da ciência, la tecnologia e da experiência, em outras palavras, é um compendio de boas e melhores práticas, e não de práticas gerais.
3. Fomentam a interoperabilidade e a capacidade de transferência.
4. Se adaptam as diferentes culturas e idiomas.

Este informe avalia o formato DIS 29500 “Office Open XML” (OOXML) mediante o contraste com cada uno destes critérios. Se expõem alguns exemplos específicos dos problemas da especificação OOXML, mas leva em conta que eles representam somente uma pequena proporção de uma grande lista de centenas de exemplos. A quantidade total de problemas sérios que tem o OOXML demonstar sua imaturidade como especificação e falta de aptidão para ser aprovado pelo modo rápido (fast-track) como uma norma ISO.


2.Preciso, reprodutível, geral

Estes critérios falam da necessidade da norma proporcionar uma descrição detalhada e por escrito que permita a prática generalizada da tecnologia em questão.

Em primeiro lugar, a parte de WordProcessingML de OOXML enumera uma grande quantidade de “Configurações de compatibilidade”4 que proporcionam a Microsoft a capacidad de armazenar informação relacionada com determinados funcionamentos a partir de aplicações existentes. Estas configurações têm nomes como: “footnoteLayoutLikeWW8”, “autoSpaceLikeWord95” e “useWord97LineBreakRules.”5 Entretanto, a especificação OOXML somente enumera estas configurações. Não proporciona uma definição delas. Somente a Microsoft conhece o significado destas configurações, já que não esclarece a definição precisa das mesmas. Em troca, OOXML remete ao leitor para as aplicações de softwares existentes:

“Para reproduzir fielmente este comportamento, as aplicações devem imitar o comportamento da dita aplicação, que incluí muitos funcionamentos possíveis e não podem ser descritos fielmente na seção desta norma Office Open XML. Se é desejado compatibilizar as aplicações com este comportamento, deve-se utilizar e duplicar o resultado das ditas aplicações”.

Esta passagem reflete claramente a falta de precisão e certamente não facilita a prática repetível ou generalizada destas funções. Uma aplicação que queira implementar OOXML, ao ler aquele trecho do presente documento que utilize estes atributos, não será capaz de interpreta-los corretamente nem de representar a página de maneira fiel e precisa. Além disso, devido ao fato destes atributos aparecerem como uma mera enumeração sem definição, a possibilidade de por em prática o benefício de ser “completamente compatível com os grandes investimentos existentes nos documentos de Microsoft Office”6 (o objetivo do OOXML segundo seus criadores) fica, consequentemente, reservado somente para a Microsoft. O padrão OOXML não facilita a prática repetível ou generalizada do benefício.

Em segundo lugar, a parte de WordProcessingML de OOXML enumera uma grande quantidade de estilos de listas que representam diversos sistemas de escrita, idioma e convenções comerciais.7 Estes denominam-se com nomes como “chicago”, “ideographDigital”, “ideographLegalTraditional”, “koreanDigital2” e “koreanLegal”. Estes são meras etiquetas e, novamente, não são definidos de maneira precisa. Se é claro para os futuros implementadores da especificação OOXML que existe algo denominado “Korean Legal Numbering”, não é claro o seu significado, assim não será possível coloca-lo em uma aplicação.

Por exemplo, um futuro implementador de OOXML na Coréia ficaria perplexo diante de um estilo de numeração que somente afirma: “...a sequência deverá consistir em caracteres definidos segundo o Manual de estilo de Chicago” sem especificar a edição do manual (existem 15 edições do Manual de estilo de Chicago) ou uma página de referência. A especificação OOXML não proporciona de nenhuma maneira o uso repetível e generalizado destas funções.

Terceiro, a parte de The SpreadsheetML de OOXML descreve um atributo de “securityDescriptor” que, de acordo com a especificação:8

“…define a quantidade de usuários que podem editar este campo sem ter que inserir uma senha para acessar o campo. Ao suprimir este atributo, se suprimirão todas as permissões outorgadas ou negadas aos usuários deste campo”.

Esta é uma característica importante relacionada com a segurança que diz que o usuário poderá editar um campo em uma planilha de cálculo sem necessidade de uma senha. Um futuro programador que implementar esta característica necessitaria saber como se representam estas contas de usuário no documento. Estão delimitadas por vírgulas? Estão delimitadas por ponto e vírgula? Estão delimitadas por espaços? OOXML não proporciona estes detalhes (ainda que dê a entender que permite mais de um nome). Ademais, não existe um conceito universal de identidade digital. Todos contamos com múltiplas contas de usuário para o correio eletrônico, para bases de dados, para o acesso ao computador, para registros de domínio, para protocolos de acesso a diretórios (LDAP), etc. A qual senha o protocolo se refere neste caso? Esta função precisa de uma definição apropriada que permita a interoperabilidade, que, por fim, é o que gerará o uso reprodutível e generalizado.

Em resumo, muitas áreas do OOXML não estão definidas ou estão parcialmente definidas. Apesar da especificação proporcionar um marco excelente para que Microsoft represente ali seus próprios documentos, esta capacidade não se traduz na possibilidade de acesso eqüitativo para que outros obtenham estes mesmos benefícios. A pergunta que se deve formular é: “OOXML define o formato de um documento de maneira suficientemente precisa para permitir a prática repetível e generalizada dos benefícios pretendidos?” Os três exemplos anteriores, junto com muitos outros, demonstram que OOXML não satisfaz o critério exposto. Sua falta de maturidade como norma se reflete também na falta de aplicações que implementem toda sua funcionalidade em uma breve revisão técnica prévia. Estes fatores o tornam inapropriado para que se possa analisado pela via rápida (fast-track), suas gritantes deficiências não permitem que seja certificado como uma norma internacional.


3.Parâmetro de excelência, melhores práticas consolidadas


Uma norma ISO não devería ser somente o registro minucioso e detalhado das características operativas de um produto particular de uma empresa, sem se importar com quanto tão dominante seja a empresa em um campo determinado. Das definições citadas anteriormente, proporcionadas pela ISO e outros, uma norma internacional deveria representar os “resultados consolidados da ciência, tecnologia e da indústria”. Uma norma deveria representar os “parâmetros de la excelência”. Em outras palavras, deveria fazer mais do que somente mostrar a forma que um único provedor realiza uma determinada tarefa. Deveria tentar proporcionar um “compendio de boas e melhores práticas” sobre a base de consenso e da opinião de especialistas. Deveria proporcionar conhecimentos sobre as melhores práticas para possibilitar a prática reprodutível e generalizada de uma tecnologia determinada.

A indústria registra suas melhores práticas através da normalização. O corpo existente de padrões de documentos e marcações representam um compendio das melhores práticas que se tenham revisado, aprovado e implementado. O trabalho do Consórcio Word Wide Web (W3C)9 adquiriu especial relevância para os documentos de formato XML, já que mantém o padrão básico XML e também outros padrões relacionados como XHTML, CSS2, XSL, XPath, XForms, SVG, MathML y SOAP, os padrões que representam a estrutura principal de XML e tecnologias afins.

Todavia, OOXML incorpora pouco das melhores práticas consolidadas da indústria. E ainda pior, pedem que os potenciais implementadores de OOXML utilizem formatos obsoletos que são propriedade exclusiva da Microsoft, inclusive quando existem normas muito melhores e mais relevantes disponíveis no Consórcio W3C.

Por exemplo, a Microsoft desenvolveu a linguagem de marcação de vetores (VML) e a propôs ao Consórcio W3C. Um comitê técnico a avaliou e a reprovou em 1998. Em seu lugar, a indústria optou por apoiar a linguagem para gráficos vetoriais escaláveis (SVG) que posteriormente o Consórcio W3C aprovou como norma e a adotou amplamente. SVG tem sido o padrão para os gráficos vetoriais XML durante quase uma década. Mas OOXML utiliza VML sob direitos de propriedade, porque Microsoft integrou seu VML com direitos de propriedade exclusivos em sua aplicação Internet Explorer e Office 2000, ao invés de adotar a norma SVG.

Além disso, a própria Microsoft reconheceu que VML não é a norma adequada para representar gráficos vetoriais:

“O formato VML é um formato obsoleto introduzido originalmente com Office 2000. Foi incluído e definido exclusivamente por razão de compatibilidade com produtos anteriores. O formato DrawingML é um formato mais recente e completo, criado com o objetivo de substituir progressivamente todos os usos de VML em formatos Office Open XML. VML deve ser considerado como um formato não aprovado que foi incluído no Office Open XML exclusivamente pela razão de compatibilidade com formatos obsoletos e se recomenda que as aplicaciones novas que precisem um formato de arquivo para gráficos utilizem preferencialmente DrawingML”.10

Em lugar de utilizar o padrão vigente SVG, Microsoft OOXML incluiu dois tipos de linguagens de marcação diferentes para gráficos vetoriais, uma que o Consórcio W3C rejeitou, em 1998, e outro que Microsoft desenvolveu em solitário por sua conta e risco. A quantidade de esforço extra que isto origina para todos aqueles que desejem implementar OOXML é imensa. Os implementadores deberão compatibilizar dois tipos diferentes de marcações para a mesma função (sem que nenhuma delas seja o padrão) e ainda que isto não assegure nenhum benefício adicional aos usuários. Somente a Microsoft será beneficiada, já que essa empresa conta desde muito tempo com o suporte para VML no Office.

Ademais, ao contrário do que no caso dos textos, é pouco provável que os conversores de formato de documentos possam trabalhar perfeitamente os gráficos vetoriais. Por tanto, a proliferação de normas redundantes para gráficos vetoriais, dois dos quais estão inclusos no OOXML, ocasionarão importantes problemas de fidelidade na hora da conversão entre formatos.

Isto é verdadeiramente um parâmetro de excelência? Certamente equivalerá ao fomento das melhores práticas? Muito ao contrário: foram adicionadas 600 páginas de requisitos para VML na especificação do OOXML que não acrescentam nenhum valor a ninguém, exceto à Microsoft, que de fato resultará em mais trabalho e complicações para aqueles que querem implementar o OOXML.

Como segundo exemplo, temos o modo como se definem as datas nas folhas de cálculo, onde se estabelece os seguintes requisitos:

“Por razão de compatibilidade com formatos antigos, uma aplicação que utilize o sistema de base de dados com data de 1900 deverá considerar o 1900 como ano bisexto… Como consequência disto, para as datas entre 1 de janeiro e 28 de fevereiro, o DIA DE SEMANA mostrará um número imediatamente anterior ao dia correto, então, a data (inexistente) de 29 de fevereiro pertence ao dia da semana que segue imediatamente ao da data de 28 de fevereiro e que precede imediatamente ao dia 1 de março.”11

Em outras palavras, o calendário gregoriano, esse calendário em que se baseia todo o comércio, a ciência e os governos de todo o mundo, é deixado de lado devido as “razões de compatibilidade”. O resultado é que todo futuro implementador de OOXML ficará obrigado a fazer com que sua aplicação proporcione aos usuários respostas errôneas a simples perguntas como “em que dia da semana caiu o 1 de fevereiro de 1900?”. Isso é necessário no chamado padrão OOXML, exatamente para interpretar corretamente os documentos que foram criados com ferramentas da Microsoft. Isto irá ocasionar um grande problema na hora de executar algo tão habitual como inter-cambiar dados entre folhas de cálculo e bases de dados relacionais através do padrão SQL. Um padrão deve no mínimo exigir que seja utilizado o calendário gregoriano.12

Como terceiro exemplo, note que o OOXML define um novo tipo de cadeia de caracteres denominado “Basic String” como “uma variante do tipo de cadeia de caracteres binária básica”.13 Uma das propriedades desta nova cadeia de caracteres é a que permite a codificação especial de caracteres que não sejam XML (caracteres de controle). Todavia, a presença de caracteres que não sejam XML em um documento XML impedem a interoperabilidade entre ferramentas XML e ferramentas baseadas neste formato. A Atividade de internacionalização do Consórcio W3C confirma esta interpretação afirmando que:

“Os códigos de controle devem ser substituídos pela marcação apropriada. Dado que XML proporciona um modo padronizado de codificar dados estruturados, ao representar códigos de controle que não se ajustem as marcações teríamos anuladas as vantagens reais da utilização de XML. Nunca se recomenda a utilização de códigos de controle em HTML e XHTML, já que estas linguagens de marcação servem para representar textos e não dados”.14

Quarto, em diferentes pontos15 OOXML utiliza “máscaras de bits” para codificar valores booleanos (que representam a lógica binária de verdadeiro/falso) em um único tipo de dado inteiro. Apesar disto ter sido muito comum há 20 anos quando se programava em C em condições de memória restrita, se considera um estilo muito deficiente para o ambiente XML. Dificulta o processamento mediante ferramentas padrão XML como XSLT, já que estas ferramentas carecem de operações em nível de bits que sejam necessárias para processar de maneira eficiente esses dados em nível de bits.

Quinto, OOXML não somente deixa de proporcionar a consolidação das melhores práticas da ciência, da indústria e do cotidiano, bem como tão pouco proporciona a consolidação das melhores práticas da própria Microsoft. O OOXML recomenda que os ajustes de impressão (quantidade de páginas para imprimir, quais páginas serão impressas, orientações sobre as mesmas, qualidade de impressão, etc.) se armazenem com um formato binário específico da sua plataforma. Por exemplo, para Windows, a orientação é armazenar no que se denomina estrutura “DEVMODE”16 Ao fazê-lo dessa maneira, os ajustes de impressão se tornariam dependentes de cada plataforma, o que impede a interoperabilidade. O que mais chama a atenção na nova especificação é que a chamada “XML Paper Specification” (XPS) da Microsoft oferece um elemento “PrintTicket” sobre o qual a Microsoft afirma:

“A tecnologia ‘PrintTicket’ é a sucessora da atual estrutura DEVMODE. Se trata de um documento sobre a base de uma linguagem de marcação extensível (XML) que especifica e mantém a informação do formato de trabalho e da configuração de trabalho de impressão… En relação ao atual subsistema de impressão, a tecnologia “PrintTicket” oferece a todos os componentes e clientes do subsistema de impressão o acesso transparente a informação armazenada atualmente nas partes públicas e privadas da estrutura DEVMODE, mediante a utilização de um formato XML bem definido.”17

Por que o OOXML adota ajustes de impressão de menor qualidade, binários, difíceis de transportar e dependentes de una plataforma e aplicação concretas, indo contra a prática recomendada pela própria Microsoft que é mudar para um “formato XML bem definido”?

Como sexto exemplo, note que o OOXML define vários algoritmos criptográficos18 que não são padronizados. Em lugar de utilizar um algoritmo ISO/IEC 10118-3:2004, ou um que esteja aprovado pelo Instituto Nacional de Padrões e Tecnologia (NIST) dos EUA, ou esteja em uma lista de algoritmos aprovados segundo FIPS-180 (Padrões Federais de Processamento da Informação, dos EUA)19, (existem vários que estão em ambas listas, como SHA-256), o OOXML especifica um algoritmo hash obsoleto. Supomos que seja utilizado em versões anteriores do Microsoft Office. Isto equivale a oferecer o conhecimento consolidado sobre as melhores práticas da ciência, da industria e do cotidiano? Pelo contrário, a Microsoft nem sequer recomenda a utilização destes algoritmos. Em troca, proporciona sistemas de proteção do tipo DRM (gestão de direitos digitais) no Office 2007 como extensões não documentadas do OOXML. Como este DRM não está documentado, nenhum outro provedor poderá utilizar essas funções livremente. Os documentos codificados no Office 2007 não podem ser lidos em nenhuma outra aplicação. Pelo contrário, os futuros implementadores do OOXML somente contam com uma compatibilidade de segurança obsoleta, que nem sequer cumpre com o padrão estabelecido no FIPS-180. Novamente, a Microsoft reserva as melhores práticas para si e impede a especificação do OOXML conte com uma segurança mais sólida.


Em resumo, o OOXML é simplesmente uma porta aberta que nos conduz a formatos binários de documentos exclusivos de um único fornecedor. O fato de evitar utilizar as normas internacionais vigentes relevantes para o caso, assim como o uso inconsistente das tecnologias de propriedade exclusiva da Microsoft, põe em evidência que OOXML não representa os resultados consolidados da ciência, da indústria, nem da experiência. Não reflete um parâmetro de excelência. Apesar de que pode prover-nos com uma técnica para ler dados codificados em um formato de um único fornecedor determinado, isso o posiciona, no melhor dos casos, somente como uma especificação técnica. Uma vez que não representa as melhores práticas consolidadas na indústria, característica essencial de uma norma ISO, a especificação OOXML não deve ser aprovada como norma internacional.

1 comment:

Unknown said...

..:: Notícia quentíssima ::..

Gostaria que o Sérgio discorre sobre a notícia publicada no Slashdot, pois a mesma me deixou um tanto quanto preocupado.

http://www.linuxworld.com.au/index.php?id=1800436990&eid=-10

Obrigado