segunda-feira, 11 de agosto de 2008

O que é um endereço IP?

Cada máquina na Internet tem um número de identificação exclusivo chamado endereço IP. Um endereço IP comum se parece com este:
  • 216.27.61.137

Para que fique mais fácil para lembrarmos estes números, os endereços IP normalmente são expressos no formato decimal com um "número decimal pontilhado" como o descrito acima. No entanto, os computadores se comunicam na forma . Veja o mesmo endereço IP no sistema binário:

  • 11011000.00011011.00111101.10001001

Os quatro números em um endereço IP são chamados de octetos, porque cada um deles tem oito posições quando visualizados na forma binária. Se forem somadas todas as posições juntas, pode-se obter 32, razão pela qual os endereços IP são considerados números de 32 bits. Como cada uma das oito posições pode ter dois estados diferentes (1 ou 0), o número total de combinações possíveis por octeto é 28 ou 256. Portanto, cada octeto pode conter qualquer valor entre 0 e 255. Combinando os quatro octetos, obtém-se 232 ou possivelmente 4.294.967.296 valores exclusivos.

Dentre quase 4,3 bilhões de combinações possíveis, determinados valores não poderão ser usados como endereços IP. Por exemplo, o endereço IP 0.0.0.0 está reservado para a rede padrão e o endereço 255.255.255.255 é usado para radiodifusão.

Os octetos têm uma outra finalidade além de simplesmente separar os números. Eles são usados para criar classes de endereços IP que podem ser designadas a uma determinada empresa, governo ou outra entidade baseada no tamanho e necessidade. Os octetos são separados em duas seções: rede e anfitrião. A seção da rede sempre contém o primeiro octeto. Ele é usado para identificar a qual rede pertence o computador. O anfitrião (às vezes chamado de Nodo) identifica o computador atual da rede. A seção do anfitrião sempre contém o último octeto. Existem cinco classes IP, além de determinados endereços especiais.

  • Rede padrão - o endereço IP 0.0.0.0 é usado para a rede padrão.
  • Classe A - essa classe é para redes muito grandes, como as maiores empresas internacionais. Os endereços IP com o primeiro octeto de 1 a 126 fazem parte dessa classe. Os outros três octetos são usados para identificar cada anfitrião. Isso significa que existem 126 redes classe A, cada uma com 16.777.214 (224 -2) possíveis anfitriões para um total de 2.147.483.648 (231) endereços IP exclusivos. As redes classe A agrupam metade do total de endereços IP disponíveis. Nas redes classe A, o valor do bit de ordem mais alta (o primeiro número binário) no primeiro octeto é sempre 0.

Rede
Anfitrião ou Nodo
115.
24.53.107
  • Testador de endereços - o endereço IP 127.0.0.1 é usado como endereço para o testador de endereços. Isso significa que ele é usado pelo computador anfitrião para enviar uma mensagem a ele mesmo. É usado geralmente para resolução de problemas e teste da rede.
  • Classe B - é usada para redes de tamanho médio. Um bom exemplo seria o campus de uma grande universidade. Os endereços IP com o primeiro octeto de 128 a 191 fazem parte dessa classe. Os endereços classe B também incluem o segundo octeto como parte do identificador da rede. Os outros dois octetos são usados para identificar cada anfitrião. Isso significa que existem 16.384 (214) redes classe B, cada uma com 65.534 (216 -2) anfitriões possíveis para um total de 1.073.741.824 (230) endereços IP exclusivos. As redes classe B agrupam um quarto do total de endereços IP disponíveis. As redes classe B têm valor 1 para o primeiro bit e valor 0 para o segundo bit no primeiro octeto.

Rede
Anfitrião ou Nodo
145.24.
53.107
  • Classe C - são geralmente usados para empresas de tamanho pequeno a médio. Os endereços IP com o primeiro octeto de 192 a 223 fazem parte dessa classe. Os endereços classe C também incluem o segundo e terceiro octetos como parte do identificador da rede. O último octeto é usado para identificar cada anfitrião. Isso significa que existem 2.097.152 (221) redes classe C, cada uma com 254 (28 -2) anfitriões possíveis para um total de 536.870.912 (229) endereços IP exclusivos. As redes classe C agrupam um oitavo do total de endereços IP disponíveis. Elas têm valor 1 para o primeiro bit, valor 1 para o segundo bit e valor 0 para o terceiro bit no primeiro octeto.

Rede
Anfitrião ou Nodo
195.24.53.
107
  • Classe D - usada para multicasts, ela é ligeiramente diferente das três primeiras classes. Ela tem valor 1 para o primeiro bit, valor 1 para o segundo bit, valor 1 para o terceiro bit e valor 0 para o quarto bit. Os outros 28 bits são usados para identificar o grupo de computadores que irá receber as mensagens multicast. A classe D agrupa 1/16 (268.435.456 ou 228) dos endereços IP disponíveis.

Rede
Anfitrião ou Nodo
224.
24.53.107
  • Classe E - é usada somente para propósitos experimentais. Ela é diferente das primeiras três classes, assim como a classe D. Ela tem valor 1 para o primeiro bit, valor 1 para o segundo bit, valor 1 para o terceiro bit e valor 1 para o quarto bit. Os outros 28 bits são usados para identificar o grupo de computadores que irá receber as mensagens multicast. A classe E agrupa 1/16 (268.435.456 ou 228) dos endereços IP disponíveis.

Rede
Anfitrião ou Nodo
240.
24.53.107
  • Radiodifusão - mensagens que são designadas a todos os computadores de uma rede são enviadas como radiodifusão. Essas mensagens sempre utilizam o endereço IP 255.255.255.255.
VariavelHacker

quarta-feira, 6 de agosto de 2008

COMO PROGRAMAR EM 1:00 H(UMA HORA)
Primeiro a pessoa tem que decidir se vai aprender alguma linguagem ou vai ficar de "lammersidade" usando programinhas como delphi.
Opa decidiu qual linguagem? mas mesmo assim vamos aprender html uma linguagem fácil de óptima utilização actualmente, vou dizer como aprendi e qual foi a primeira linguagem, Html (Hyper text make up language ou Hyper text Markup Language) essa grande linguagem, tem gente que diz que é muito simples muito pobre essa linguagem, estão enganados, Ah esqueci, qual o objectivo dela? Todos usam para criar sites, pra mim essa é a única utilidade.
Pronto, olha, eu vou disponibilizar uma boa apostila sobre.

Apostila download

Html é uma linguagem interpretada ou seja um programa o interpreta no caso o browser(navegador), um exemplo o Mozzila Firefox, mas para os lammers Internet Explorer(Meu primo fez um melhor 11 anos.).

Abra seu editor de texto, se você usa o Microsoft Windows vá em iniciar, executar, digite "notepad", tecle "Enter" ou "ok" com o mouse.

Lá você deverá digitar o código para sua página em html(esse ato é programar).

olha vou passar o que deve fazer mas não irei explicar o que cada tag(em português etiquetas, são constantes entre <> que tem cada uma uma função) faz, leia a apostila.

Digite:

<html>
<head>
<title>"Escreva entre aspas o titulo de seu site"</title>
</head>
<body bgcolor='white'>
<font size='5' color='Black'>Esse é o seu primeiro site</font>
</body>
</html>



copie esse código acima, cole para o notepad(bloco de notas), salve o arquivo como site.html.

clique nele e visualizará seu site somente se tiver um navegador.

Pronto parabéns seu site está feito.

Em breve farei explicação complexas e bem novas.

Como funcionam os projetos open source

Você pode nunca ter lido uma licença de software durante a instalação, ou nunca ter alterado o código fonte de um programa para que ele funcionasse à sua maneira, mas pode ter certeza: você já usou softwares open source!

Dizer que um software é open source (código aberto) significa dizer que o seu código fonte está disponível para o usuário. Isso quer dizer que o usuário poder ler o código do programa. Há projetos que, dependendo da licença usada, também permitem a alteração do código fonte, com algumas ou nenhuma restrição.

free software bottom
Reprodução
Botom do Free Software

Se o software não faz algo que poderia fazer, qualquer pessoa com conhecimento em programação poderia incrementá-lo inserindo novas funcionalidades. Com isso, esse tipo de software tende a evoluir muito mais rápido que os softwares proprietários, que dependem de recursos financeiros e de decisões comerciais para ter ou não alguma funcionalidade que os usuários queiram.

Para os projetos open source que permitem a alteração do código fonte, o desenvolvimento quase sempre é feito de forma colaborativa, em que programadores e outras pessoas ajudam com o crescimento do software e do projeto, seja inserindo novas funcionalidades, eliminando erros (bugs) ou até escrevendo documentação como manuais de uso e guias de instalação.

Projetos de software open source podem nascer de duas formas:

  1. Quando há necessidade que ele exista e há programadores ou empresas dispostos a criá-lo (caso do Linux), ou
  2. Quando empresas resolvem abrir o código fonte de algum produto comercial que ela já desenvolvia de forma proprietária (caso do Netscape).

Embora a maioria dos usuários normais desconheça o funcionamento de um projeto open source, seus resultados estão disponíveis a todos e são usados a todo tempo em toda parte. O seu provedor de internet provavelmente utiliza software open source para lidar com as conexões de rede e grande parte dos sites que você acessa é desenvolvida com tecnologia open source, de forma colaborativa.

Neste artigo vamos descrever as vantagens do software open source, suas vantagens técnicas e culturais, suas licenças e o que você pode ou não fazer. Vamos destrinchar como funciona o desenvolvimento colaborativo, o que os programadores usam, como se comunicam e como recebem por isso.

O que é um projeto open source

Projetos de Open Source são aqueles com a finalidade de criar e manter softwares que incluem o código fonte para seus usuários. Dependendo da licença usada, ao baixar e instalar um desses softwares, o usuário ganha o direito de usá-lo para qualquer fim, modificá-lo e redistribui-lo.

Ter o código fonte aberto significa que as pessoas podem estudá-lo e muitas vezes incrementá-lo com algo que o software poderia ou deveria fazer. Com isso, muitos usuários acabam incrementando o software com funcionalidades extras ou até aplicando consertos de bugs que possam ocorrer.

Esse tipo de software muitas vezes é desenvolvido de forma colaborativa. Desta forma, as alterações que são de interesse comum são compartilhadas para todos os usuários quando o projeto lança uma nova versão estável, e o projeto tende a crescer exponencialmente tornando-se auto-sustentável.

Softwares Open Source são também conhecidos como FOSS, ou Free and Open Source Software (Software Livre e de Código Aberto). Há duas entidades que especificam o que pode ser considerado Open Source e Free Software: a Open Source Initiative (OSI) e a Free Software Fundation (FSF). A tradução de Free Software é Software Livre e não deve ser confundida com Software Grátis. Veja abaixo os principais Projetos Open Source:

O sistema operacional GNU e GNU/Linux

Criado em 1983 por Richard Stallman e atualmente mantido pela comunidade, o sistema operacional GNU é compatível com o Unix, totalmente aberto e livre. Por GNU entende-se todo um conjunto de aplicativos básicos como interpretadores de terminais texto (também conhecidos como shell), bibliotecas de programas, compiladores, editores de textos, ambientes gráficos (como o Gnome) etc.

Esse conjunto é atualmente empacotado usando o kernel Linux, de Linus Torvalds, desenvolvido por ele em 1991. Ele é vendido na caixinha, revistas de informática ou via download, na forma de distribuições, em que cada empresa ou fundação seleciona os aplicativos mais utilizados pelo seu público alvo. Exemplos de distribuições GNU/Linux são Ubuntu, Debian, Red Hat e Mandriva.

linux/mandriva
©2008 Variavel Hacker
A distribuição GNU/Linux Madriva com o ambiente gráfico KDE



O ambiente gráfico Gnome

Gnome (acrônimo para GNU Network Object Model Environment) é um ambiente gráfico desktop gratuito e livre para sistemas UNIX ou Unix-like (como são chamados os sistemas parecidos com Unix, como o GNU/Linux). É o ambiente desktop oficial do projeto GNU e vem incluído em muitas distribuições GNU/Linux e BSD. Um ambiente gráfico desktop permite ao usuário usar o mouse (e não comando de terminal) e interagir com as janelas do Linux.

O projeto Gnome nasceu em agosto de 1997, quando Miguel de Icaza decidiu criar um ambiente desktop inteiramente livre para sistemas livres.

gnome
©2008 Variavel Hacker
O ambiente gráfico Gnome

O navegador de internet Mozilla Firefox

Mozilla Firefox (inicialmente conhecido como Phoenix e, posteriormente, como Mozilla Firebird) é um navegador livre e multiplataforma desenvolvido pela Mozilla Foundation com ajuda de centenas de colaboradores.

Maior concorrente do Internet Explorer, da Microsoft, esse navegador substituiu o Mozilla, que havia sido criado a partir do código fonte do Netscape Navigator.

firefox
©2008 Variavel Hacker
O navegador de internet Mozilla Firefox
­

A suíte de escritório OpenOffice.org ou BrOffice.org

OpenOffice.org é uma suíte de aplicativos para escritório multiplataforma compatível com o Microsoft Office. A suíte é baseada em uma antiga versão do StarOffice, o StarOffice 5.1, adquirido pela Sun Microsystems em agosto de 1999. O código fonte da suíte foi liberado dando início a um projeto de desenvolvimento de um software de código aberto em 13 de outubro de 2000, o OpenOffice.org. O principal objetivo era fornecer uma alternativa de baixo custo, de alta qualidade e de código aberto.

No Brasil, o nome "OpenOffice.org" gerou uma disputa judicial com uma empresa do Rio de Janeiro que já havia registrado a marca "Open Office", e por isso em 25 de Janeiro de 2006 o programa passou a ser chamado aqui de BrOffice.org.

Writer
©2008 Variavel Hacker

Um pouco de história

O termo “open source” ficou conhecido em janeiro de 1998, em Palo Alto na Califórnia, quando a Netscape liberou o código fonte de seu navegador de internet Nescape Navigator, na tentativa de frear as investidas da Microsoft no mercado de navegadores de internet até então dominado pelo Navigator.

Um grupo de pessoas formado por Eric S. Raymond, Jon Hall e outros programadores propôs o termo Open Source para designar softwares de código fonte aberto, mas que não eram exatamente livres, como o Navigator, cujo código fonte foi licenciado sob NPL (Netscape Public License), uma licença um pouco restritiva.

Antes disso, apenas o termo “Free Software” (software livre) era mais conhecido, e este já existia desde 1983 com o início do projeto GNU e da criação da Free Software Fundation (FSF), de Richard Stallman.

O Projeto GNU

stallman
Reprodução/GNU
Richard Stallman, fundador do
Projeto GNU e da
Free Software Foundation
Nos anos 70 a 80, Richard Stallman era um programador do MIT (Massachusetts Institute of Technology ou Instituto de Tecnologia de Massachusetts) e vivia dentro dos laboratórios estudando programação. Naquela época o conceito de software proprietário (com código fonte fechado) ainda não existia.

Grande parte dos programas de computador já eram vendidos e distribuídos com o código fonte incluso. Com tantos processadores e plataformas diferentes, essa estratégia tornava o programa portável. O usuário poderia assim readaptar o programa para rodar na sua plataforma preferida, de modificando-a também para as suas necessidades pessoais.

Estudantes de programação se beneficiaram muito com isso, já que podiam estudar como o programa havia sido desenvolvido e aprender novas técnicas de programação.

Os efeitos desse modelo de colaboração era que os usuários avançados melhoravam o código fonte dos programas e essas melhorias eram normalmente repassadas para os fabricantes e fornecedores de software, e posteriormente para os outros usuários. Esse modelo de colaboração, entre programadores, foi chamada de Cultura Hacker.

Nos final dos anos 70 e início dos anos 80 a Cultura Hacker ameaçava fragmentar-se. Para evitar que os softwares fossem executados em plataformas concorrentes, muitos fabricantes começaram a não mais distribuir o código fonte junto com o software, e este último passou a vir com direitos autorais (copyrights) e licenças para limitar ou proibir a cópia do software e sua redistribuição.

Prevendo a fragmentação e a extinção da Cultura Hacker, Richard Stallman propôs à comunidade de programadores a criação de uma plataforma de software livre, que fosse portável para qualquer processador/plataforma e que qualquer pessoa teria direito de usar, modificar e redistribuir, como eram feitos os softwares alguns anos antes.

simbolo do gnu
Reprodução
Símbolo do GNU
Em Setembro de 1983 foi iniciado o Projeto GNU. GNU significa “GNU is Not Unix”, em português “GNU não é UNIX”. Naquela época o Unix era o sistema operacional mais utilizado nos computadores das universidades, e como todo programa de computador da época, tinha o código fonte disponível para os usuários, mesmo não sendo um software livre.

O projeto juntou os programadores que aceitaram a idéia de Stallman, desenvolvendo de forma colaborativa o Sistema Operacional GNU, o primeiro sistema operacional livre inspirado e compatível com o Unix, criado do zero, sem utilizar partes de código do Unix.

Em 4 de outubro de 1985, Richard Stallman fundou a Free Software Foundation, uma entidade sem fins lucrativos criada para dar suporte ao movimento de software livre e ao Projeto GNU.

O kernel Linux

No início da década de 90, sistema operacional GNU estava quase pronto. Já havia bibliotecas de código, compiladores, um shell, sistema de janelas e editores de texto. Porém, o principal ainda não estava pronto: o kernel.

O kernel é o núcleo de um sistema operacional. É o componen­te responsável pela comunicação entre os programas e o hardware, criando uma camada de abstração para os programas e gerenciando os recursos da máquina, como memória, espaço em disco, entrada e saída de dados.

O sistema operacional GNU ainda não dispunha de um kernel finalizado e pronto para o uso. Em seu projeto original, o sistema deveria incluir um kernel chamado GNU/Hurd, que foi criado para suportar a maioria das plataformas de processamento que existiam na época e que viessem a existir no futuro. Para que essa portabilidade ocorresse, o Hurd foi desenvolvido de forma modular e complexa, fator que contribuiu para a demora do lançamento de uma versão estável.

Torvalds
Reprodução
Linus Torvalds, criador­
do kernel ­Linux

Enquanto isso, na Finlândia, o programador Linus Torvalds estudava o design de sistema operacional do MINIX, um sistema Unix-like desenvolvido pelo professor Andrew S. Tanenbaum, para uso acadêmico. Em 1991, Torvalds iniciou a construção de um kernel mais simples que o do MINIX, e deu a ele o nome de Linux.

O kernel foi então lançado sob licença GPL (GNU General Public License), o que o tornou legalmente compatível com as bibliotecas e aplicativos da GNU, completando assim provisoriamente o sistema operacional GNU, até que o kernel Hurd estivesse pronto.

O sistema operacional Linux

O kernel Linux acabou ganhando mais popularidade que o projeto GNU, isto fez com que o nome “Linux” fosse usado para designar todo o sistema e não apenas o kernel.

A Free Software Foundation (FSF) recomendou chamá-lo de GNU/Linux para não esquecer de todo o ecossistema de aplicativos “GNU” que compõe o sistema operacional. A diferença de termos entre Linux e GNU/Linux gerou muita discussão na comunidade de software livre.

Tux
©2008 Variavel Hacker
Tux, o símbolo do Linux
O Linux também alavancou o desenvolvimento de outros projetos livres, pois foi um dos primeiros projetos a utilizar um novo modelo de desenvolvimento colaborativo em que qualquer pessoa pudesse enviar suas alterações sem necessariamente fazer parte do time de desenvolvimento. Isso fez o Linux crescer exponencialmente e atender à demanda do mercado, tornando-se um sistema operacional viável para diversos tipos de usos e plataformas. Esse modelo de desenvolvimento foi chamado Bazar no livro "A Catedral e o Bazar", de Eric Raymond, e acabou inspirando outros projetos.

Atualmente o GNU/Linux é o sistema operacional mais utilizado em servidores e supercomputadores, sistemas embebidos e desktops de baixo custo, sendo o mais forte concorrente do Microsoft Windows.

Mas o que aconteceu com o Hurd? O kernel original do projeto GNU ainda está em desenvolvimento e suas primeiras versões não estão prontas para uso. Em comparação com o Linux, o Hurd tem poucas pessoas envolvidas em seu desenvolvimento.

O BSD

Enquanto o GNU e o GNU/Linux se destacavam por ser um sistema Unix-like compatível, em termos de código, com a grande maioria de programas para Unix mas sem conter partes de código do Unix e com isso livre de processos legais, o BSD enfrentava um problema com a AT&T (na época, dona dos direitos autorais do Unix) e com a Justiça.

­Beastie
Reprodução
Beastie, mascote
­do ­projeto FreeBSD

­BSD é sigla para Berkeley Software Distribution, um Unix-like que derivou diretamente do código do Unix original, desenvolvido em Berkeley, na Universidade da Califórnia nos anos 70. Foi o primeiro sistema operacional a implementar o protocolo TCP/IP e a realizar testes com a Internet.

Por conter partes de código do Unix, o BSD sofreu pressão legal, e seu fonte teve de ser reescrito. Esse atraso fez com que o projeto GNU e o kernel Linux ganhassem mais popularidade e usuários.

Do BSD surgiram duas variações: O FreeBSD e o NetBSD, o primeiro destinado a diversos usos, como Desktops e Servidores e o último focado em portabilidade. Acredite, há torradeiras que são capazes de rodar NetBSD!

Net BSD Toaster
Reprodução
Torradeira com NetBSD­
­
Do NetBSD surgiu o OpenBSD, um Unix-like focado em segurança e que é muito utilizado nos dias de hoje para a construção de firewalls. O projeto OpenBSD também é o responsável por criar a biblioteca de encriptação OpenSSL (Security Sockets Layer), capaz de criar túneis encriptados de tramissão de dados por TCP/IP como o https e o ssh (com o OpenSSH), muito utilizados no Linux e Windows.

Enquanto o GNU/Linux e o projeto GNU reinventaram o Unix inserindo novos padrões de design de sistema operacional, os BSDs se caracterizam por seguir à risca todos os padrões do Unix, porém nenhum deles pode ser legalmente chamado de Unix.

O nome Unix é marca registrada da The Open Group, instituição que provê vários testes para garantir se um sistema operacional pode ou não ser chamado de Unix. Tanto o FreeBSD, quanto o NetBSD e o OpenBSD passariam nesses testes, porém os projetos não dispõem de recursos financeiros para realizá-los. Dessa forma, o termo Unix-like foi o escolhido para especificar o tipo de sistema operacional.

A sigla BSD também é usada como referência a programas que usam a licença BSD, que em comparação à GPL da GNU é muito menos restritiva. A licença BSD permite, entre outras coisas, que a empresa que desenvolve um software proprietário possa utilizar código BSD como base sem ter a obrigação de devolver para a comunidade as novas alterações por ele desenvolvidas. A única obrigação da empresa seria apenas, em algum lugar do software, colocar as notas de copyrights dizendo de onde o software se originou e que partes de código ele utiliza.

Já para a GPL, se um software usa código GPL desenvolvido pela comunidade, todo o software deve ser GPL, garantindo assim à comunidade todas as alterações que forem feitas por empresas e o direito infinito de alterar e redistribuir o software nessas condições.

A licença BSD permitiu que o código fonte do protocolo TCP/IP fosse utilizado em sistemas operacionais proprietários e abertos, cada qual alterando a sua licença, e o sistema BSD usado como subsistema do Mac OS X, da Apple.

sistemas operacionais unix-like
Reprodução
Gráfico exibe as descendências dos sistemas operacionais Unix-like
O Writer, processador de textos da suíte OpenOffice.org

Como um projeto open source é desenvolvido

O código fonte

Antes de tudo, para se ter um software é necessário escrevê-lo em uma linguagem de programação. O código fonte é composto de vários arquivos, normalmente resultado de uma engenharia que permite a sua escrita e manutenção em pequenas unidades de código.

Grande parte dos projetos open source são desenvolvidos nas linguagens C e C++. No entanto, esta não é uma regra. Há milhares de projetos livres em Python, Ruby, Perl, PHP e outras linguagens.

vim
©2008 Variavel Hacker
Arquivo fonte do projeto lighttpd, servidor
web escrito em C, editado no VIM

Ambiente de Compilação e Depuração

Compilar um programa significa traduzir o código fonte em código de máquina. Para isso utilizam-se softwares compiladores, como o gcc e o g++ (GNU C Compiler e GNU C++ Compiler). Porém, projetos grandes costumam ter centenas ou milhares de arquivos fontes, e para que o projeto funcione com tanta gente trabalhando neles é necessário um sistema de compilação automatizado.

Os softwares desenvolvidos em C/C++ normalmente utilizam a suíte de aplicativos de compilação do GNU Build System, conjunto de softwares de linha de comando que “preparam” o código fonte para que funcione em várias plataformas com vários desenvolvedores.

a depuração é o meio pelo qual os desenvolvedores checam se suas partes de código estão funcionando. Pode ser feita manualmente, utilizando softwares como o gdb (GNU debugger), ou em alguns casos utilizando rotinas de testes automatizados que alguns projetos de software open source disponibilizam.

Árvores de código

Para que não haja confusão entre código novo e testado e código em desenvolvimento, a maioria dos projetos separam os códigos fontes em três unidades diferentes: estável, testes e desenvolvimento.

Ciclo de desenvolvimento de um projeto open source
©2008 Variavel Hacker
Ciclo de desenvolvimento de
­­ um projeto open source

­A árvore estável contém apenas código fonte de lançamentos. Isso significa que as únicas alterações que ela irá receber é de bugfixes (correções) de erros encontrados depois do seu lançamento. Nenhuma nova funcionalidade será incluída nesta árvore de código. Essa árvore corresponde à última versão estável liberada para o público e pronta para o uso.

A árvore de testes contém códigos que precisam ser testados (e normalmente reparados, caso ocorram erros). Correspondem às versões beta e não são totalmente seguras. Devem ser usadas apenas para depuração, garantindo estar livre de bugs na próxima versão estável.

A árvo­re de ­desenvolvimento contém código mutável. Nela todos os dias são incluídas novas funcionalidades, e não há garantias de que o software irá funcionar, pois a versão baixada uma hora antes pode ser diferente da versão atual, dependendo do fluxo de desenvolvimento do projeto. Versões de desenvolvimento só são usadas por programadores envolvidos no projeto.

Forks

No mundo do desenvolvimento de software, os forks acontecem quando um programador copia uma árvore de código e nela inicia um desenvolvimento independente, criando um software diferente. As alterações feitas no fork não são aplicadas na árvore de código do primeiro projeto, fazendo com que o software copiado vire um novo software.

Os forks são um recurso muito interessante nos projetos Open Source. Se um time de desenvolvedores resolver não mais liberar o código fonte de algum software, os usuários poderão continuar o desenvolvimento da última versão liberada ao público.

Um exemplo disso é o Mozilla Firefox, que derivou do Mozilla, que por sua vez derivou do código aberto do Netscape Navigator. O OpenBSD surgiu como um fork do NetBSD.

Os Modelos de Desenvolvimento

Softwares Open Source podem ser desenvolvidos de várias maneiras, no entanto há duas formas de desenvolvimento mais utilizados nos projetos abertos:

  • O modelo Catedral e
  • O modelo Bazar

No modelo Catedral, há um time de desenvolvedores eleitos que estão lá por próprio mérito e que conhecem bem os objetivos do projeto e a estrutura de código do software. Nesse modelo, os projetos aceitam contribuições da comunidade em geral através de relatos de falhas (bug reports) ou correções (patches), que são partes de código que alteram o código fonte do software, mas que só irão fazer parte do código fonte principal se forem aceitos pelos desenvolvedores do time.

Para fazer parte do time de desenvolvimento, uma pessoa poderia ser indicada ou mostrar suas habilidades técnicas contribuindo com o projeto, mas sem fazer parte dele.

O modelo de desenvolvimento Catedral pode ser comparado ao desenvolvimento de um software proprietário, com a diferença que o código fonte está lá disponível para os usuários e que eles podem fazer o que bem entenderem (dependendo da licença usada).

no modelo Bazar, usado primeiramente no projeto do kernel Linux, o desenvolvimento é feito de forma totalmente aberta, utilizando a internet, e qualquer pessoa está livre para inserir suas próprias funcionalidades ou remendos. O livro de Eric Raymond, "A Catedral e o Bazar", mostra mais detalhes desses dois estilos de desenvolvimento.


As equipes de desenvolvimento

Por meio da internet, as equipes de desenvolvimento se reúnem, discutem o que deve entrar ou sair do projeto, definem metas e desenvolvem o software. Para que isso aconteça, uma série de técnicas e ferramentas são necessárias: comunicação, sistema de controle de versões, controle de bugs e documentação. Vamos detalhar essas ferramentas a seguir:

Comunicação

O pré-requisito para uma equipe de programadores desenvolver software de forma colaborativa utilizando a internet são os meios de comunicação. Sem isso, não seriam estabelecidas metas e não haveria discussões. Alguns projetos utilizam Mail Lists (Listas de E-mail) para se comunicarem, trocando informações sobre desenvolvimento e até trocando patches com alterações no código fonte principal.

lista de discussao do linux-kernel
©2008 Variavel Hacker
O site oficial do kernel Linux fornece links
para o acesso aos arquivos de todas as
mensagens trocadas na lista linux-kernel, que são
usadas pelos desenvolvedores do projeto

Outros projetos fornecem canais de IRC (Internet Really Chat), um protocolo de chat muito antigo que era usado com o cliente mIRC, em Windows. Projetos menores também utilizam Fóruns de Discussão, em que qualquer usuário pode publicar suas dúvidas usando apenas um navegador de internet e uma conta de cadastro no fórum do projeto. Esses meios de comunicação também são usados para prover suporte aos usuários.

tela de chat de IRC
©2008 Variavel Hacker
Tela de chat de IRC no canal #lighttpd da rede FreeNode,
onde são discutidos os detalhes sobre o
desenvolvimento do projeto e suporte aos usuários

Sistemas de Controle de Versão

Sistemas de Controle de Versão, ou VCS (Version Control System) são aplicativos que gerenciam árvores de código fonte e suas versões. Esses softwares dão aos programadores o controle sobre os arquivos, permitindo que saibam o que foi alterado na estrutura de código em um determinado tempo, por quem e quando.

Caso uma nova versão de um arquivo esteja com problemas, os programadores podem optar por corrigi-lo, substitui-lo pela versão antiga, e informar o autor do problema. Esses softwares são necessários para que o desenvolvimento colaborativo aconteça sem provocar problemas na árvore de código.

Há dois tipos de VCS: os centralizados, como o CVS e o Subversion, e os descentralizados, como Bazaar, Mercurial e Git. Este último foi desenvolvido por Linus Torvalds e usado para gerenciar o código fonte do kernel Linux.

No modelo centralizado, toda alteração salva é automaticamente colocada na árvore de código em um ou mais servidores centrais. Já no modelo descentralizado, o programador não necessariamente depende de uma conexão com a internet para enviar suas modificações. Ele pode ficar o dia todo programando e salvando as modificações em sua própria máquina e para só enviá-las à noite para o servidor central do projeto.

Controle de Bugs

Um software estável nunca está livre de bugs. Há erros que só irão aparecer em determinadas situações e que passaram despercebidos nas rotinas de testes antes do lançamento da última versão.

Para isso, a maioria dos projetos open source dispõe de ferramentas que coletam bugs. Caso você tenha um problema com o software, pode abrir um ticket (um chamado) e informar aos desenvolvedores a ocorrência do problema (a menos que algum outro usuário com o mesmo problema já não tenha feito isso). Dependendo da gravidade do problema, eles podem corrigir imediatamente ou prometer que o erro será corrigido na próxima versão.

Tela do Bugzilla
©2008 Variavel Hacker
O projeto Mozilla oferece o controle de bugs usando o
software Bugzilla. Todos os dias são abertos tickets que
reportam bugs e vulnerabilidades à equipe de desenvolvimento

Documentação

A documentação é necessária tanto para usuários, que vão procurar meios de instalar e configurar o software, como para desenvolvedores, que vão procurar guias de normas de programação padronizadas para a colaboração no projeto. Ela pode ser desenvolvida na forma de grandes manuais, em HTML, PDF e outros formatos, e ficar disponível para download no website do projeto.

Há projetos que preferem ter as suas documentações desenvolvidas em tempo real. Para isso utilizam Wikis, ferramentas que permitem criar, editar e linkar páginas da web rapidamente, assim qualquer usuário pode incrementar a documentação de forma fácil e rápida.

Wiki colaborativo do Ubuntu
©2008 Variavel Hacker
A distribuição GNU/Linux Ubuntu disponibiliza um wiki
colaborativo para documentação e resolução de problemas


Plataformas de desenvolvimento colaborativo

Há tantas aplicações de infra-estrutura necessárias para manter e gerenciar um projeto de open source, que algumas empresas passaram a fornecer gratuitamente um conjunto de aplicativos para projetos open source. Nessas plataformas são incluídos:

  • Wikis para documentação e suporte
  • Sistemas de controle de bugs
  • Listas de E-mail
  • Fóruns de Discussão
  • Servidores de Controle de Versão (VCS) e
  • Links para downloads das versões estáveis

O Sourceforge (mais antigo, desenvolvido pela CollabNet), o Google Code (da Google Inc) e o Launchpad (desenvolvido pela Canonical, empresa que suporta o Ubuntu GNU/Linux) são exemplos desses serviços. O único requisito para ter um projeto hospedado nestas platafomas é publicar o software em alguma licença open source.

Esses serviços geram renda com anúncios e links patrocinados e normalmente ganham infra-estrutura de grandes empresas, como servidores e links de conexão com a Internet, na forma de doação ou de parceria.

Projeto Pidgin, hospedado no SourceForge
©2008 Variavel Hacker
Página do projeto Pidgin, mensageiro instantâneo ­
multiprotocolo e multiplataforma
­hospedado no SourceForge

Google Code
©2008 Variavel Hacker
O Google Code, criado inicialmente para hospedar os
projetos do Google, agora disponibiliza serviços
de hospedagem gratuita para projetos open source

Ubuntu no Launchpad
©2008 Variavel Hacker
Site de desenvolvimento da distribuição Ubuntu no Launchpad

Alguns projetos optam por usar sua própria infra-estrutura, podendo assim utilizar os softwares que desejarem. Para estes projetos, existem softwares que integram todas as ferramentas necessárias. Um deles, muito conhecido, é o Trac, que se integra ao sistema de controle de versão Subversion.

Lighttpd rodando no Trac
©2008 Variavel Hacker
Site de desenvolvimento do projeto Lighttpd rodando no Trac

As licenças de software

As licenças de software especificam, de forma legal, o que o usuário pode e não pode fazer com o software. Essas licenças normalmente estão disponíveis no site do projeto, no programa de instalação do aplicativo, no ínicio dos arquivos de código fonte ou em algum documento texto na árvore de código fonte.

Um projeto de software open source pode utilizar qualquer licença, pode usar uma licença pronta como a GNU GPL ou pode até criar uma própria voltada para os interesses do projeto. Para ser considerado FOSS, o projeto precisa definir algumas liberdades básicas:

  • A liberdade de usar o software, para qualquer fim
  • A liberdade de alterar o software. O código fonte aberto é um pré-requisito para essa liberdade.
  • A liberdade de distribuir o software, versões modificadas ou sem modificações.
licença do lighttpd
©2008 Variavel Hacker
O arquivo texto COPYING, na áravore de código do projeto lighttpd exibe a licença usada no projeto
As várias licenças de software open source

Originalmente escrita por Richard Stallman para o projeto GNU, a GNU General Public License, ou simplesmente GPL, é a mais popular licença de software livre utilizada em projetos abertos.

Essa licença se distingue das outras por obrigar que trabalhos derivados de algum código GPL, passe a ser GPL também. Se você usar alguma parte de código GPL dentro do código fonte de algum software proprietário, ao distribui-lo você está legalmente obrigado a distribuir o código fonte de todo o software.

A GPL garante que quem usar algum software derivado ganhará os mesmos direitos do primeiro usuário que realizou alterações.

Outra licença muito comum é a BSD, ela é menos restritiva e permite o uso integral ou parcial do seu código fonte em programas proprietários.

Isso significa que qualquer um pode derivar um trabalho publicado originalmente sob licença BSD e torná-lo um software proprietário. Neste caso, a única exigência é exibir em algum lugar do software ou do material utilizado para distribuir o software as notas de copyrights das partes de código que o software utiliza.

Outras licenças também seguem a linha da licença BSD, como a licença MIT e a LGPL, esta última seguindo as mesmas características da GPL porém sem exigir que os trabalhos derivados estejam na mesma licença.

Licenças duplas

Alguns projetos de software open source fornecem duas licenças, uma livre e outra comercial. A licença livre normalmente é a GPL, que exige que os trabalhos derivados também sejam GPL.

Neste caso, se uma empresa quiser desenvolver um aplicativo comercial e não quiser abrir o código fonte para o público, pode optar por comprar uma licença comercial do software, que permite o uso em aplicações proprietárias.

Esse modelo de negócio tem sido usado por empresas como a TrollTrech, que desenvolve a biblioteca gráfica multiplataforma Qt.

Essa biblioteca, com a sua licença aberta (GPL), é usada no projeto KDE, um ambiente gráfico livre para GNU/Linux e outros Unix-like. Porém, softwares proprietários multiplataforma, como o Skype e o navegador Opera, também a usam, além da sua licença comercial.

Copyrights

As licenças livres não retiram os direitos autorais de seus autores. O autor do software pode, se desejar, alterar a licença das partes de software que ele escreveu. A próxima versão poderia vir em qualquer outra licença de software, podendo ser até um software proprietário.

Os usuários prejudicados poderiam, neste caso, fazer um fork da última versão aberta ao público e então iniciar um novo desenvolvimento em torno daquele código.


Como um projeto é sustentado financeiramente

“Os programadores de um projeto open source trabalham de graça?” - é o que sempre acaba perguntando uma pessoa leiga. A resposta a essa pergunta é: “Não. E sim! Depende do projeto.”

Existem, sim, "heróis" que depois de um árduo dia de trabalho ainda arrumam tempo para cuidar de projetos livres, porém isso não é uma regra. Há projetos que são de interesse de grandes empresas, que empregam pessoas para inserir neles funcionalidades que irão de alguma forma ser úteis para os seus negócios.

Porém, antes disso acontecer, a maioria dos projetos são iniciados por programadores que trabalharam em alguma idéia dispondo do seu tempo livre.

Quais são os custos?

Um projeto de software open source, além do custo de mão-de-obra dos programadores, tem de arcar com outros gastos. Domínios na internet, registro de logomarcas, infra-estrutura como servidores e links de conexão com a internet são só alguns exemplos do que pode gerar despesas em um projeto.

Projetos open source podem ser financiados pela própria comunidade de usuários, que doam dinheiro para manutenção de recursos. Podem utilizar a infra-estrutura de sites como o SourceForge, que se valem dos projetos para veicular publicidade e assim obter renda para manter os serviços online.

E, ainda, podem receber doações (em dinheiro ou em infra-estrutura) de empresas que se interessam pelo projeto para seus próprios negócios.


Suporte aos usuários

Os usuários de softwares open source podem obter suporte de três formas:

  • Suporte comunitário impessoal

Este tipo de suporte é oferecido na forma de documentação. Por meio dela o usuário saberá como usar o software, como funciona o projeto que mantém o software, como configurá-lo em seu sistema etc. A documentação não fornece ajuda para erros específicos, mas normalmente lista, através das FAQ's, problemas que normalmente podem ocorrer e já ocorreram com vários outros usuários.

  • Suporte Comunitário Pessoal

Esse outro tipo de suporte é dado usando meios de comunicação, como Listas de E-mail, IRC e Fóruns de Discussão. Você pode perguntar e obter ajuda, dependendo do número de pessoas que saibam como resolver o seu problema.

  • Suporte Comercial

Há empresas que se focam em fornecer suporte para projetos de software open source, como o Linux. Essas empresas podem oferecer suporte por telefone, cursos, documentação aprofundada e outros serviços.


Como colaborar em um projeto open source

O pré-requisito básico para a colaboração em um projeto de software open source é entender como o software funciona, e depois entender como funciona o projeto.

Alguns projetos disponibilizam roadmaps (uma espécie de passo-a-passo) que mostram para onde estão caminhando. Outros também fornecem guias sobre como colaborar. Os guias são quase sempre criados em torno do que é mais necessário no projeto.

Para colaborar em um projeto você não precisa exclusivamente programar. Há diversas formas de colaboração:

Documentação

Uma coisa é certa sobre os programadores: Eles adoram programar! E por isso, normalmente tendem a deixar de lado tarefas necessárias para o projeto, como a criação da documentação dos softwares.

Por documentação, entendemos os manuais de uso, guias de instalação, tutoriais e FAQ's. Tudo que possa oferecer um suporte impessoal para o usuário, fazendo com que este só vá procurar o suporte pessoal (Listas de E-mail, Canais de IRC, Fóruns de Discussão) depois de ler o manual.

Em um projeto open source, qualquer pessoa que conheça o software pode contribuir escrevendo a documentação do sistema.

Tradução

Outro fato sobre softwares open source é que a maioria é desenvolvida em inglês. Por padrão, muitos deles suportam outros idiomas, mas os projetos esperam que usuários de outras nações cuidem disso.

Os desenvolvedores do projeto costumam criar arquivos com todos os textos e mensagens que irão aparecer na execução do programa. Uma vez que tudo está contido em um único arquivo, o processo de tradução fica mais fácil para usuários não-programadores.

Testes

Outra forma de contribuir é testando as várias versões do software, como a alpha, a beta e os pré-releases, e, após descobrir erros e outros problemas de instabilidade, reportar para o time de desenvolvimento. Com isto você estará ajudando o projeto a lançar versões estáveis mais garantidas e confiáveis.

Artwork

Quem tem aptidões artísticas pode ajudar projetos open source desenvolvendo a arte gráfica. Programadores quase sempre não têm tempo para usar softwares de criação e edição de imagem, e a “cara” dos softwares abertos nem sempre é a mais bonita. Designers gráficos podem ajudar criando logotipos para o projeto, ícones e até o layout do site do projeto, tornando-o mais amigável e menos denso.

Publicidade

Um software não é nada sem usuários. E para softwares open source, quanto mais usuários, mais colaboradores e mais o projeto crescerá.

Qualquer pessoa pode contribuir para projetos de software open source fazendo publicidade de diversas formas: contando para um amigo, escrevendo um relato em um blog sobre como foi a sua instalação, encorajando outras pessoas a instalar e testar o software, ou até de forma mais direta - colocando banners no seu site.

Suporte aos Usuários

Qualquer pessoa que entenda apenas como o software funciona já tem os requisitos necessários para colaborar em um projeto software open source: Basta ajudar outros usuários a resolver problemas de instalação e configuração, acessando as listas de e-mail, canais de IRC e/ou fóruns de discussão.

Programando

Para colaborar como um programador, no entanto, a lista de requisitos é um pouco maior, como segue:

  • Conhecer o software
  • Ter experiência na linguagem de programação na qual o software foi desenvolvido
  • Conhecer o código do software e as normas de programação estipuladas pelo projeto
  • Conhecer o ambiente de compilação usado para a construção do software
  • Conhecer o Sistema de Controle de Versão (VCS) usado pelo projeto e
  • Saber para onde o projeto está indo, e quais são as novas funcionalidades a serem implementadas

Um programador pode ajudar em um projeto open source resolvendo os problemas reportados ou até implementando novas idéias no software.


VariavelHacker



terça-feira, 29 de julho de 2008

Como funciona a lógica booleana

Portas simples

Há três, cinco ou sete portas simples que precisamos conhecer, dependendo de como se queira contá-las (logo veremos o motivo). Com elas, podem-se construir combinações que implementarão qualquer componente digital imaginável. Essas portas parecerão um pouco limitadas e incrivelmente simples, mas veremos algumas combinações interessantes nas seções seguintes que as tornarão bem mais inspiradoras.

A porta mais simples chama-se "inversor", ou porta NOT. Ela usa um bit como entrada e produz seu oposto como saída. Segue abaixo, a tabela lógica para a porta NOT e seu símbolo comummente usado em diagramas de circuitos:

Porta NOT
A Q
0 1
1 0

Nesta figura, perceba que a porta NOT tem uma entrada chamada A e uma saída chamada Q ("Q" é usada para a saída porque se usarmos "O" (do inglês "output") ela pode se confundir com zero). A tabela mostra o comportamento da porta. Ao atribuirmos o valor 0 a A, Q produz um 1. Ao atribuirmos o valor 1 a A, Q produz um 0. Simples.

A porta AND executa uma operação lógica "e" sobre duas entradas, A e B:

Porta AND
A B Q
0 0 0
0 1 0
1 0 0
1 1 1

A idéia por trás de uma porta AND é, "Se A = 1 E B = 1, então Q = 1." Podemos notar este comportamento na tabela lógica desta porta. A tabela deve ser lida linha por linha, assim:

Porta AND
A B Q
0 0 0 Se A = 0 E B = 0, Q = 0.
0 1 0 Se A = 0 E B = 1, Q = 0.
1 0 0 Se A = 1 E B = 0, Q = 0.
1 1 1 Se A = 1 E B = 1, Q = 1.

A próxima é a porta OR. Sua idéia básica é "Se A = 1 OU B = 1 (ou se ambas forem iguais a 1), então Q = 1."

Porta OR
A B Q
0 0 0
0 1 1
1 0 1
1 1 1

Essas são as três portas básicas (uma maneira de contá-las). É bastante comum que se reconheçam outras duas também: a porta NAND e a porta NOR. Essas são combinações simples da porta AND ou da porta OR com a porta NOT. Se as incluirmos, a contagem subirá para cinco. Este é o funcionamento básico das portas NAND e NOR (elas são apenas inversões das portas AND e OR):

Porta NOR
A B Q
0 0 1
0 1 0
1 0 0
1 1 0
Porta NAND
A B Q
0 0 1
0 1 1
1 0 1
1 1 0

As duas últimas portas que podem aparecer na lista são as portas XOR e XNOR, também conhecidas como portas "OR exclusivo" e "NOR exclusivo", respectivamente. Estas são suas tabelas:

Porta XOR
A B Q
0 0 0
0 1 1
1 0 1
1 1 0
Porta XNOR
A B Q
0 0 1
0 1 0
1 0 0
1 1 1

A idéia por trás da porta XOR é: "se A= 1 OU B = 1, mas NÃO ambas, então Q = 1." O motivo pelo qual XOR pode não constar de uma lista de portas é porque ela pode ser facilmente implementada com o uso das três portas listadas originalmente. Esta é uma implementação:

Se tentarmos todos os quatro padrões diferentes para A e B e os rastrearmos através do circuito, veremos que Q se comporta como uma porta XOR. Como existe um símbolo bastante compreensível para as portas XOR, costuma ser mais fácil pensar em XOR como uma "porta padrão" e usá-la da mesma maneira que as portas AND e OR nos diagramas de circuitos.

Somadores simples


Comecemos com um somador de um único bit. Digamos que, em um dado projeto, seja necessária a adição de bits para que se obtenha uma resposta. Começamos a projetar o circuito verificando todas as combinações lógicas. Podemos fazer isso a partir das quatro seguintes somas:

0 0 1 1
+ 0 + 1 + 0 + 1
0 1 1 10

Tudo vai bem, até que aparece 1 + 1. Nesse caso, você terá de se preocupar com aquele carry bit (bit de transporte) irritante. Se não se importar em transportá-lo (pois, afinal, trata-se de um problema de adição de 1 bit), você poderá resolver esse problema com uma porta XOR. Do contrário, talvez possa reescrever as equações de modo que sempre sejam incluídos 2 bits de saída, assim:

0 0 1 1
+ 0 + 1 + 0 + 1
00 01 01 10

A partir dessas equações, podemos formar a tabela lógica:

Somador de 1 bit com Carry-Out
A B Q CO
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

Observando a tabela, vemos que é possível de se implementar Q com a porta XOR e CO (carry-out) com a porta AND. Simples.

E se quisermos somar dois bytes de 8 bits? Aí fica um pouco mais complicado. A solução mais simples é modularizar o problema em componentes reutilizáveis e replicar os componentes. Nesse caso, é necessária a criação de apenas um componente: um somador binário completo.

A diferença entre um somador completo e o somador que vimos anteriormente é que o somador completo aceita uma entrada A e uma B junto com uma entrada carry-in (CI - "vem um"). Com um somador completo, poderemos enfileirar oito deles para criar um somadorda largura de um byte e deixar transitar o bit de transporte, em cascata, de um somador para o próximo.

A tabela lógica para um somador completo é um pouco mais complicada do que as tabelas que usamos antes, porque agora temos 3 bits de entrada. Fica assim:

Somador Completo de 1 bit com Carry-In e Carry-Out
CI A B Q CO
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

Há muitas maneiras de se implementar essa tabela. Vamos apresentar um método de fácil compreensão. Verificando o bit Q, vemos que os 4 bits superiores comportam-se como uma porta XOR com relação a A e B, enquanto os 4 bits inferiores comportam-se como uma porta XNOR com relação a A e B. Da mesma maneira, os 4 bits superiores de CO comportam-se como uma porta AND com relação a A e B, e os 4 bits inferiores comportam-se como uma porta OR. Levando em consideração os fatos, o seguinte circuito implementa um somador completo:

Definitivamente, esse não é o método mais eficiente para se implementar um somador completo, mas é de fácil compreensão e bastante lógico. Se for do seu interesse, veja o que se pode fazer para implementar a mesma lógica com menos portas.

Agora, temos uma peça funcional chamada "somador completo". Um engenheiro de computação, então, desenvolve uma "caixa preta", para que os dados fiquem registrados e ele possa deixar de se preocupar com os detalhes do componente. Uma caixa preta para um somador completo seria assim:

Com a caixa preta, é fácil desenvolver um somador completo de 4 bits:

Neste diagrama, o carry-out de cada bit alimenta diretamente o carry-in do próximo bit. Um 0 é conectado ao primeiro bit do tipo carry-in. Se inserirmos dois números de 4 bits nas linhas A e B, a soma de 4 bits aparecerá nas linhas Q com um 1 bit adicional para o último bit do tipo carry-out. Esse encadeamento pode se estender tanto quanto desejável, usando 8, 16 ou 32 bits.

O somador de 4 bits que acabou de ser criado é chamado de somador com propagação do carry (ripple-carry adder). Ele tem esse nome porque os bits de transporte "propagam" de um somador até o próximo. Essa execução é vantajosa por sua simplicidade, mas inconveniente pelos problemas de velocidade. Em um circuito real, as portas levam tempo para mudarem de estado (uma questão de nanossegundos, mas, em computadores de alta velocidade, nanossegundos são significativos). Assim, somadores com propagação do carry de 32 ou 64 bits devem levar de 100 a 200 nanossegundos para terminar sua soma final por causa da propagação do carry . Por esse motivo, os engenheiros criaram somadores mais avançados chamados somadores com carry antecipado (carry-lookahead adders). O número de portas necessárias para implementar o somador com carry antecipado é grande, mas seu tempo para terminar a soma é muito menor.

Flip-flops

Uma das coisas mais interessantes que podemos fazer com portas booleanas é criar memória. Se as portas forem dispostas corretamente, elas vão se lembrar do valor de entrada. Este conceito simples é a base da RAM (memória de acesso randômico) dos computadores, e também possibilita a criação de uma ampla variedade de circuitos úteis.

A memória é baseada em um conceito chamado realimentação (feedback), o que significa que o valor de saída de uma porta retorna à sua entrada. O mais simples circuito com realimentação com o uso de dois inversores está exemplificado abaixo:

Ao acompanhar o caminho da realimentação, nota-se que, se o valor de Q for igual a 1, ele sempre será 1. Se por acaso for 0, sempre será 0. Embora esse circuito em particular não tenha muito uso, é possível ver como a realimentação funciona.

Em circuitos "reais", o uso dessa abordagem simples de realimentação do inversor é perfeitamente possível. Um circuito com realimentação de mais utilidade com o uso de duas portas NAND está exemplificado abaixo:

Esse circuito tem duas entradas (R e S) e duas saídas (Q e Q'). Por causa da realimentação, sua tabela lógica fica um pouco incomum se a compararmos àquelas vistas anteriormente:

R S Q Q'
0 0
Inválida
0 1 1 0
1 0 0 1
1 1
Retém

O que a tabela lógica mostra é que:

  • se R e S tiverem valores opostos, Q acompanha S e Q' é o inverso de Q;
  • se tanto R quanto S recebem valor 1 simultaneamente, então o circuito retém o que foi apresentado anteriormente em R e S.
Há ainda o estado inválido. Nesse estado, tanto R quanto S valerão 0, o que não tem significado em aplicação de memória, enquanto memória, nada vale. Para prevenir esse estado ilegal, costuma-se acrescentar uma pequena lógica condicional no lado da entrada, conforme abaixo:

Neste circuito, há duas entradas (D e E). Podemos pensar em D como "Data" (dado) e E como "Enable" (habilitar). Se E valer 1, Q acompanhará D. Se E mudar para 0, no entanto, Q lembrará do que tiver sido visto por último em D. Um circuito com este comportamento costuma ser conhecido como flip-flop.

Um flip-flop bastante comum é o flip-flop J-K. Não está claro de onde veio o nome "J-K", mas ele costuma ser representado em um quadro como este:

Neste diagrama, P significa "Preset" (pré-definido), C significa "Clear" (limpar) e Clk significa "Clock" (relógio). A tabela lógica fica assim:

P C Clk
J K Q Q'
1 1 1-para-0
1 0 1 0
1 1 1-para-0
0 1 0 1
1 1 1-para-0
1 1
Alterna
1 0 X
X X 0 1
0 1 X
X X 1 0

A tabela informa que: primeiro, Preset e Clear ignoram J, K e Clk completamente. Se o valor de Preset for modificado para 0, então o valor de Q será modificado para 1; e se o valor de Clear for modificado para 0, então o valor de Q será modificado para 0, não importando o que J, K e Clk estiverem fazendo. No entanto, se Preset e Clear tiverem valor igual a 1, então J, K e Clk poderão operar. A notação 1-para-0 significa que, quando o relógio mudar de 1 para 0, os valores de J e de K, caso sejam opostos, serão memorizados. J e K ficam armazenados na borba da descida do relógio (a transição de 1 para 0). Porém, se tanto o valor de J quanto o de K equivalerem a 1 borba da descida do relógio, então Q simplesmente alterna, ou seja, muda de seu estado atual para o estado oposto.

Agora, você deve estar se perguntando: "e para que serve isso?". Na verdade, o conceito de "disparo por borda" é muito útil. O fato de o flip-flop J-K apenas "armazenar" (latching) as entradas J-K em uma transição de 1 para 0 faz com que ele seja muito mais útil como dispositivo de memória. Os flip-flops J-K também são bastante úteis em contadores (muito usados na criação de relógios digitais). Aqui está o exemplo de um contador de 4 bits usando flip-flops J-K:

As saídas para este circuito são A, B, C e D, que representam um número binário de 4 bits. Na entrada do relógio do flip-flop, mais à esquerda, aparece um sinal mudando de 1 para 0 e de volta para 1 repetidamente (um sinal oscilatório). O contador contará com as bosrdas de descida que vê neste sinal, ou seja, a cada vez que este sinal que chega mudar de 1 para 0, o número de 4 bits representado por A, B, C e D será incrementado em 1. Então, o contador irá de 0 a 15 e retornará a 0. Podemos acrescentar quantos bits quisermos a este contador e contarmos o que quisermos. Por exemplo, com o uso de uma chave magnética em uma porta, o contador registrará o número de vezes que a porta se abre e se fecha. Com um sensor ótico colocado na estrada, o contador poderá registrar o número de carros que passarem.

Outro uso do flip-flop J-K é na criação de um latch disparado por borda, conforme abaixo:

Neste arranjo, o valor de D é armazenado quando o nível do clock vai de baixo para o alto. Os latches têm extrema importância no projeto de unidades centrais de processamento (CPUs) e periféricos em computadores.

Implementação de portas

Nas seções anteriores, vimos que, com o uso de portas booleanas simples, podemos implementar somadores, contadores, latches e assim por diante. É um avanço e tanto pois, até pouco tempo atrás, só os seres humanos sabiam somar dois números. Sem muito trabalho, é possível projetar circuitos Booleanos que implementem subtração, multiplicação, divisão... veja que estamos próximos de uma calculadora de bolso. A partir dela, não é longo o caminho até as CPUs usadas nos computadores.

E como implementar essas portas na vida real? O Sr. Boole as concebeu no papel e no papel elas parecem ótimas. No entanto, precisamos implementá-las fisicamente para que as portas possam executar sua lógica efetivamente. Feita a transição, teremos nos lançado à criação de verdadeiros dispositivos computacionais.

O modo mais simples de se entender a execução física da lógica booleana é com o uso de relés. Essa é a forma pela qual foram implementados os primeiros computadores. Atualmente, os relés foram substituídos pelos sub-microscópicos transistores criados em chips de silício. Esses transistores são incrivelmente pequenos e rápidos, e consomem bem pouca energia se comparados a um relé. No entanto, os relés são incrivelmente fáceis de se entender, e podem implementar lógica booleana de forma muito simples. Por causa dessa simplicidade, você será capaz de ver que o mapeamento, desde as "portas na teoria" até "ativar portas implementadas em realidade física", é algo possível e simples. Realizar o mesmo mapeamento com transistores é tão fácil quanto.

Vamos começar com um inversor. É fácil implementar uma porta NOT com um relé: iremos usar voltagens que representam estados de bit. Atribuímos ao binário 1 o valor de 6 volts, e ao binário 0 o valor de zero volts (terra). Usamos uma bateria de 6 volts para prover os circuitos de energia. A porta NOT, portanto, terá a seguinte aparência:

Se esta figura não faz sentido para você, leia Como funciona o relé para obter uma explicação.

Neste circuito, você verá que, se atribuirmos zero volts a A, Q receberá 6 volts; e se atribuirmos 6 volts a A, Q receberá zero volts. É muito fácil de se implementar um inversor com um relé.

Também é fácil implementar uma porta AND com dois relés:

Aqui, note que, se atribuirmos 6 volts para A e B, Q receberá 6 volts. Do contrário, Q receberá zero volts. Este é exatamente o comportamento que se espera de uma porta AND. A porta OR é ainda mais simples: é só juntar dois fios, A e B, para criá-la. Você também poderá utilizar dois relés paralelos, se assim o desejar.

Partindo desse axioma, é possível criar três portas básicas: E, OU ou NÃO (são mais comuns os seus equivalentes em inglês: AND, OR e NOT), a partir dos relés. Podemos juntar estas portas físicas usando os diagramas lógicos acima para criar um somador físico de 8 bits (ripple-carry adder). Se usarmos chaves simples (interruptores) para aplicar entradas A e B ao somador e juntarmos todas as oito linhas Q a lâmpadas, poderemos somar quaisquer dois números e ler os resultados nas lâmpadas ("acesas" = 1, "apagadas" = 0).

A lógica booleana sob a forma de portas simples é bastante direta. A partir delas, criam-se funções mais complexas, como a soma. A implementação física dessas portas é fácil e possível. Desses três fatores, obtemos o coração da revolução digital e podemos entender, em profundidade, como funcionam os computadores.




terça-feira, 22 de julho de 2008

Introdução a Como funcionará a computação em nuvem Apple-Google

Em seu novo livro, "The Big Switch: Rewiring the World, from Edison to Google" (A grande virada: reconectando o mundo de Edison ao Google), o especialista em computadores e ex-editor executivo da Harvard Business Review, Nicholas Carr, discute as mudanças que ele prevê para o futuro da computação.

Uma das alterações mais dramáticas será a transição para o conceito de computação em nuvem - sob o qual os aplicativos e arquivos ficariam armazenados em um imenso supercomputador ou rede central e os usuários obteriam acesso aos seus arquivos usando computadores mais enxutos e menos sofisticados do que as máquinas atuais.


Author Nicholas G. Carr
John Todd/Sun Microsystems/Getty Images
Nicholas Carr acredita que as gigantes da tecnologia - Google e Apple - podem estar à beira de criar um sistema de computação em nuvem

Em 17 de outubro de 2007, Carr levou a idéia um passo adiante, em um post em seu blog na Rough Type. Ele apontou para duas das mais quentes empresas de tecnologia, Google e Apple, e afirmou que elas estão à beira de uma parceria sob a qual a Apple produziria um hardware barato que usuários poderiam carregar consigo, e que o aparelho ganharia acesso ao poder de computação das vastas centrais de processamento de dados que o Google vem construindo para hospedar aplicativos e dados para milhões de usuários.

A idéia de computação em nuvem certamente não é novidade. Larry Ellison, da Oracle, lançou a New Internet Computer (NIC), em 2000, para estimular o avanço da indústria nessa direção. O conceito é bastante simples: em sua mesa, você teria um computador de custo muito baixo, com apenas processador, teclado e monitor. Não haveria disco rígido ou drive de CD/DVD. A máquina estaria conectada à Internet e teria acesso a um supercomputador central, que hospedaria todos os seus programas e arquivos. No entanto, a idéia era prematura. As vendas da NIC foram muito baixas, provavelmente devido à escassez de banda disponível nos Estados Unidos [fonte: PCWorld (em inglês)]. A empresa fechou as portas em 2003.

Mas por volta de 2006, quase 75% dos domicílios norte-americanos dispunham de acesso doméstico em banda larga [fonte: Neilsen/NetRatings (em inglês)]. Será que uma parceria entre Google e Apple poderia tornar a computação em nuvem um fenômeno generalizado? E, caso a idéia avance, o que Apple e Google teriam a ganhar com ela? A maior questão de todas: caso um computador desse tipo seja construído, alguém vai querer usá-lo?

Leia mais para aprender sobre o futuro da computação

Um googlilhão de potência

Um googol representa o número um seguido por 100 zeros. O nome do Google deriva do desejo de seus fundadores de manter um registro sobre o imenso volume de informações disponíveis na Internet [fonte: Google (em inglês)]. À medida que a empresa crescia, ela começou a oferecer mais serviços do que simples buscas na Web. Por meio de inovações desenvolvidas internamente e aquisições de outras companhias, o Google criou o que hoje conhecemos como Google Docs, um pacote de aplicativos disponíveis via Web (em inglês) que inclui processador de texto, programa de planilhas e programa de apresentações. Com o Gmail, isso coloca o Google em concorrência direta contra a Microsoft. E, ao contrário do Office, o Google Docs tem custo zero.

Os serviços hospedados são a espécie de aplicativo que poderia ocupar posição central em um sistema de computação em nuvem, o que representa apenas uma das razões para que seja perfeitamente viável que o Google representasse o parceiro perfeito de infra-estrutura em uma aliança com um produtor de hardware. A máquina do Google, na verdade uma rede de máquinas, oferece impressionante poder de computação e também capacidade de reserva.

O Google já armazena backups múltiplos de informações em seus equipamentos e, se uma parte da máquina apresenta defeitos, pode ser substituída por outra sem quaisquer perdas de informação [fonte: Baker (em inglês)]. Usar um computador em nuvem hospedado na imensa infra-estrutura do Google libertaria o usuário da necessidade de levar arquivos com ele - nada de pen drives, discos rígidos de laptops, CDs, DVDs e outras formas removíveis de mídia. O usuário poderia trabalhar em um projeto de casa, do escritório ou em um aparelho portátil, enquanto estivesse em movimento.

Com um computador em nuvem, o usuário provavelmente não pagaria por software. Usando aplicativos hospedados no servidor, a máquina local teria todo o software (em inglês) de que precisaria para trabalhar, sem precisar armazená-lo localmente. Não seria preciso atualizar o software quando surgem as novas versões - e todos os participantes da nuvem usariam o mesmo software, o que evitaria problemas de compatibilidade.

Mas o que isso representaria para os homens de negócios que precisam viajar a trabalho? Um computador em nuvem requereria conexão com a Internet e os aviões atuais não oferecem essa capacidade, ainda que existam linhas aéreas que planejam oferecê-la. A pessoa seria obrigada a passar o tempo lendo ou assistindo ao filme exibido durante o vôo. O usuário também teria de confiar ao Google, ou a qualquer outro provedor, a guarda de seus documentos. Muitas empresas não permitem que seus documentos internos sejam utilizados por pessoas do lado de fora de seus firewalls. Será que elas mudariam de idéia se a maioria dos negócios fossem conduzidos sob um modelo de computação em nuvem?

Google computing center in The Dalles, Ore.
Craig Mitchelldyer/Getty Images
Em 2006, o Google construiu dois imensos centros de computação em The Dalles, Oregon. Cada um tem o tamanho de um campo de futebol, e um sistema de refrigeração imenso é necessário para proteger os computadores instalados.

Um dos grandes problemas gerados pela criação de um computador em nuvem seria o volume de eletricidade requerido para fazê-lo funcionar. O Google construiu seu centro de dados em The Dalles, Oregon, devido ao acesso de alta velocidade à Internet propiciado por linhas de fibra óptica e devido à proximidade da represa Dalles [fonte: Gilder (em inglês)]. O Google precisa de muita eletricidade para acionar o equipamento de refrigeração necessário para manter em funcionamento milhares de servidores. Os dois edifícios do tamanho de um campo de futebol abrigam, cada um, uma central de refrigeração de quatro andares de altura [fonte: Markoff and Hansell].

Caso o Google ainda não seja capaz de oferecer o poder de processamento necessário para acionar um sistema mundial de computação em nuvem, é certo que está a caminho de adquirir essa capacidade. Mas por que a empresa formaria uma parceria com a Apple para fornecer hardware ao usuário final? Na próxima seção, a opinião de Carr e a opinião de alguns críticos.

Por que Google e Apple?

The Apple iPhone
Courtesy Apple
Com o sucesso do iPhone, a Apple se tornou a queridinha do setor de telefonia móvel. Carr acredita que a empresa possa aplicar sua capacidade de design à criação de um aparelho popular e barato para computação em nuvem.

Por que Carr e outros acreditam que o Google esteja tão interessado em criar uma rede (em inglês) de computação em nuvem para as massas? A idéia não é difícil de desenvolver. O Google se tornou uma das maiores empresas de computação do mundo e, com certeza, interessa-se por novas idéias e novas oportunidades de negócios.

O presidente do Google, Eric Schmidt, tornou-se integrante do conselho da Apple em agosto de 2006. Quando questionado sobre a idéia de uma parceria com a Apple, em entrevista à revista Wired, em dezembro de 2007, ele respondeu com franqueza: "O modelo de arquitetura do Google, que gira em torno da banda larga, serviços e assim por diante, e funciona muito bem com os poderosos aparelhos e serviços que a Apple vem desenvolvendo. Somos o perfeito fornecedor de infra-estrutura para os problemas que eles desejam resolver" [fonte: Vogelstein (em inglês)].

De acordo com Carr, a Apple não dispõe de poder de supercomputação da ordem requerida para cuidar do aspecto de infra-estrutura da parceria. Não existem muitas organizações que o tenham. Apenas Google, Microsoft, Yahoo, IBM e Amazon teriam essa capacidade, diz Prabhakar Raghavan, diretor de pesquisa do Yahoo [fonte: Baker]. Google e Apple são parceiros há anos. Caso a Microsoft obtenha sucesso em sua oferta de aquisição do Yahoo anunciada em 1° de fevereiro de 2008, a combinação entre as duas empresas poderia bancar um sistema sofisticado de computação em nuvem.

Se Google e Apple formarem uma aliança para essa espécie de empreitada, eis o que Carr imagina para o seu computador em nuvem.

  • Baixo custo: a máquina que o usuário adquiriria custaria menos de US$ 200 e não haveria custo para os aplicativos ou pela transferência de dados.
  • Ecológico: com um chip de baixo consumo de energia e memória flash, um cliente enxuto - ou computador de rede - da Apple não utilizaria disco rígido ou drive de mídia óptica, o que consome muita energia.
  • Fácil manutenção: a ausência de disco rígido ou de drive óptico significaria menos partes móveis, o que aumentaria a durabilidade do aparelho.
  • Fácil atualização: o usuário não precisaria se preocupar com a atualização de software, já que o sistema cuidaria disso. E a máquina poderia ser usada até a hora de jogá-la fora [fonte: Carr].

Em um acordo como esse, diz Carr, a Apple venderia o hardware e o Google subsidiaria o custo de fornecer os servidores por meio de publicidade, da mesma maneira que o faz nos outros negócios em que opera. Schmidt disse que o Google ofereceria o máximo possível de serviços gratuitamente, ainda que a empresa acredite que os usuários mais avançados possam ser convencidos a pagar por acesso a recursos superiores.

Robert Cringely, um conhecido repórter e colunista de tecnologia, concorda com Carr quanto à possibilidade de uma parceria entre Google e Apple para computação em nuvem, mas também acredita que o negócio seria menos simples do que Carr descreve. Em vez disso, a personalidade de Steve Jobs, o lendário co-fundador e presidente da Apple, poderia servir como fonte de irritação a Schmidt e o Google. "Schmidt (e Carr) vêem a situação do aspecto de a Apple não dispor de um supercomputador, mas Jobs acredita com igual firmeza que o Google não sabe operar o supercomputador de que dispõe, e além disso ele poderia alugar um supercomputador sempre que precisasse dele. Em resumo, é isso" [fonte: Cringely (em inglês)].

Cringely acredita que a Apple produzirá o aparelho para computação em nuvem previsto por Carr, mas que também produzirá outros aparelhos para a mesma função, a preços variados. Ele diz que a Apple seria a empresa dominante na parceria e que o Google ficaria em posição secundária.

A Apple poderia mesmo encontrar outros parceiros para fornecer serviços aos seus consumidores? E se o Google e a Apple se unissem? Alguém seria capaz de enfrentá-los? Aprenda mais sobre os esforços de computação em nuvem na próxima página.

Outros candidatos à nuvem

Um dos motivos para que a idéia da computação em nuvem esteja recebendo tanto destaque são os esforços de outras empresas, além do Google, para concretizá-la. Microsoft, Amazon e IBM estão entre as companhias que o mercado vê como propensas a oferecer sistemas de computação em nuvem.

Dois dos principais candidatos a concorrer com o Google e sua parceria com a Apple talvez venham a juntar forças. Em 1° de fevereiro de 2008, a Microsoft anunciou que faria uma oferta pelo Yahoo, o que ajudaria as duas empresas em seus esforços para derrotar o gigante das buscas [fonte: Microsoft (em inglês)]. Além de imenso poder de computação e muitos outros serviços na Web. o Yahoo ofereceria uma rede robusta de Web mail e o site de fotografia Flickr. A Microsoft entraria com o Windows Live, um processador de texto e um programa de agenda online. Com o domínio do pacote de aplicativos Office no mercado de software empresarial dos Estados Unidos, a Microsoft poderia disputar seriamente o mercado da computação em nuvem.

Outro potencial concorrente seria a Amazon.com. O grupo já é uma das maiores empresas de varejo online do mundo e tem interesses em outras áreas. O Amazon Web Services é um pacote de serviços em modelo nuvem que a empresa oferece a pequenos criadores de software que precisam de um espaço online de trabalho [fonte: Amazon.com (em inglês)]. A Amazon Elastic Compute Cloud (EC2) oferece aos usuários poder de processamento para seus trabalhos. Eles podem armazenar arquivos no Amazon Simple Storage Service (S3) e usar SimpleDB, um banco de dados, para armazenar e obter acesso rápido a arquivos menores [fonte: Claburn (em inglês)].

IBM Blue Cloud computer
Forschungszentrum Jülich/IBM
Em sua iniciativa Blue Cloud, a IBM quer ligar em rede seus grandes computadores, como este, em um centro de pesquisa em Jülich, Alemanha, a fim de criar uma poderosa nuvem

Em novembro de 2007, a IBM anunciou sua iniciativa Blue Cloud, sob a qual a empresa oferece um pacote de hardware e software que permite a seus clientes criar nuvens internas próprias [fonte: LaMonica (em inglês)]. A empresa já havia formado parceria com o Google, um mês antes, a fim de fornecer soluções em modelo nuvem para seis universidades norte-americanas. A IBM espera desenvolver o programa de forma a permitir que mais universidades, empresas e agências governamentais o adotem [fonte: Lohr].

Muitas empresas estão oferecendo hardware criado para funcionar em redes (em inglês) nuvem, entre as quais Hewlett Packard, Dell and Clear Cube. No entanto, um computador não seria necessariamente a única opção para se obter a acesso a uma rede nuvem - o usuário poderia utilizar outros aparelhos capazes de acesso à Internet, como um celular. Em janeiro de 2008, o Google apresentou lance em um leilão do governo dos Estados Unidos pela freqüência de rádio dos 700 MHz, o que permitiria que a empresa operasse um serviço de telefonia móvel [fonte: CNET News.com (em inglês)]. Caso o Google obtenha sucesso com seu lance, as portas se abririam ainda mais para a idéia de Carr. O Google argumentava que as freqüências deveriam estar abertas a acesso por toda uma gama de aparelhos e o governo atendeu a esse pedido. O espectro estará aberto a acesso assim que os lances superarem o mínimo de US$ 4,6 bilhões [fonte: Albanesius (em inglês)].

A despeito do entusiasmo de Carr, que afirmou em seu blog que esperava que a parceria Google-Apple começasse a dar frutos "dentro de meses e não anos", não houve anúncio formal de qualquer das duas empresas quanto a isso. Mas, em janeiro de 2008, a Apple anunciou um novo produto que, de muitas maneiras, assemelha-se a um aparelho para computação em nuvem.

Na feira MacWorld, em San Francisco, o presidente da Apple, Steve Jobs, revelou o aparelho mais próximo já desenvolvido de um equipamento para conexão em nuvem: o MacBook Air. O computador tem menos de 2,5 cm de espessura e Jobs tirou o modelo de exibição de um envelope comum de escritório, ao apresentá-lo. Para produzir uma máquina assim fina, os engenheiros da Apple sacrificaram o drive óptico e algumas conexões, entre as quais a de Ethernet. A bateria teve de ser incorporada de uma maneira que impede que o usuário a remova sozinho. Diferente de um computador cliente, o MacBook Air dispõe de um disco rígido, quer em formato tradicional, quer em formato solid-state [fonte: Apple (em inglês)].

Mas, por enquanto, Google e Apple não formaram parceria oficial para um aparelho de computação em nuvem - o MacBook Air não está vinculado apenas aos serviços Google de armazenagem e ao software oferecido online pela empresa.