terça-feira, 26 de abril de 2011

HISTÓRIA DO LINUX

O nome Linux surgiu da mistura de Linus + Unix. Linus é o nome do criador do Linux, Linus Torvalds. E Unix, é o nome de um sistema operacional de grande porte, no qual contaremos sua história agora, para que você entenda melhor a do Linux.

A origem do Unix tem ligação com o sistema operacional Multics, projetado na década de 1960. Esse projeto era realizado pelo Massachusets Institute of Technology (MIT), pela General Eletric (GE) e pelos laboratórios Bell (Bell Labs) e American Telephone na Telegraph (AT&T). A intenção era de que o Multics tivesse características de tempo compartilhado (vários usuários compartilhando os recursos de um único computador), sendo assim, o sistema mais arrojado da época. Em 1969, já exisita uma versão do Multics rodando num computador GE645.] 

Ken Thompsom era um pesquisador do Multics e trabalhava na Bell Labs. No entanto, a empresa se retirou do projeto tempos depois, mas ele continuou seus estudos no sistema. Desde então, sua idéia não era continuar no Multics original e sim criar algo menor, mas que conservasse as idéias básicas do sistema. A partir daí, começa a saga do sistema Unix. Brian Kernighan, também pesquisador da Bell Labs, foi quem deu esse nome. 

Em 1973, outro pesquisador da Bell Labs, Dennis Ritchie, rescreveu todo o sistema Unix numa linguagem de alto nível, chamada C, desenvolvida por ele mesmo. Por causa disso, o sistema passou a ter grande aceitação por usuários externos à Bell Labs. 

Entre 1977 e 1981, a AT&T, alterou o Unix, fazendo algumas mudanças particulares e lançou o System III. Em 1983, após mais uma série de modificações, foi lançado o conhecido Unix System IV, que passou a ser vendido. Até hoje esse sistema é usado no mercado, tornando-se o padrão internacional do Unix. Esse sistema é comercializado por empresas como IBM, HP, Sun, etc. O Unix, é um sistema operacional muito caro e é usado em computadores poderosos (como mainframes) por diversas multinacionais. 

Qual a relação entre o Unix e o Linux, ou melhor, entre o Unix e Linus Torvalds? 

Para responder essa pergunta, é necessário falar de outro sistema operacional, o Minix. O Minix é uma versão do Unix, porém, gratuita e com o código fonte disponível. Isso significa que qualquer programador experiente pode fazer alterações nele. Ele foi criado originalmente para uso educacional, para quem quisesse estudar o Unix "em casa". No entanto, vale citar que ele foi escrito do “zero” e apesar de ser uma versão do Unix, não contém nenhum código da AT&T e por isso pode ser distribuído gratuitamente. 

A partir daí, “entra em cena” Linus Torvalds. Ele era um estudante de Ciências da Computação da Universidade de Helsinki, na Filândia e em 1991, por hobby, Linus decidiu desenvolver um sistema mais poderoso que o Minix. Para divulgar sua idéia, ele enviou uma mensagem a um grupo pela Usenet (uma espécie de antecessor da Internet). A mensagem pode ser vista no final deste artigo. No mesmo ano, ele disponibilizou a versão do kernel (núcleo dos sistemas operacionais) 0.02 e continuou trabalhando até que em 1994 disponibilizou a versão 1.0. Até o momento em que este artigo estava sendo escrito, a versão atual era a 2.6. 

O Linux é um sistema operacional livre e é uma re-implementação das especificações POSIX (padronização da IEEE, Instituto de Engenharia Elétrica e Eletrônica) para sistemas com extensões System V e BSD. Isso signfica que o Linux é bem parecido com Unix, mas não vem do mesmo lugar e foi escrito de outra forma. 


Mas porque o Linux é gratuito? 

Linus Torvalds, quando desenvolveu o Linux, não tinha a inteção de ganhar dinheiro e sim fazer um sistema para seu uso pessoal, que atendesse suas necessidades. O estilo de desenvolvimento que foi adotado foi o de ajuda coletiva. Ou seja, ele coordena os esforços coletivos de um grupo para a melhoria do sistema que criou. Milhares de pessoas contribuem gratuitamente com o desenvolvimento do Linux, simplesmente pelo prazer de fazer um sistema operacional melhor. 

Licença GPL 

O Linux está sob a licença GPL, permite que qualquer um possa usar os programas que estão sob ela, com o compromisso de não tornar os programas fechados e comercializados. Ou seja, você pode alterar qualquer parte do Linux, modificá-lo e até comercialiazá-lo, mas você não pode fechá-lo (não permitir que outros usuários o modifiquem) e vendê-lo. 

GNU 

Mas a história do Linux não termina por aqui. É necessário também saber o que é GNU. GNU é um projeto que começou em 1984 com o objetivo de desenvolver um sistema operacional compatível com os de padrão Unix. O Linux em si, é só um kernel. Linus Torvalds, na mesma época que escrevia o código-fonte do kernel, começou a usar programas da GNU para fazer seu sistema. Gostando da idéia, resolveu deixar seu kernel dentro da mesma licença. 

Mas, o kernel por si só, não é usável. O kernel é a parte mais importante, pois é o núcleo e serve de comunicador entre o usuário e o computador. Por isso, com o uso de variantes dos sistemas GNU junto com o kernel, o Linux se tornou um sistema operacional. 

Mas você pode ter ficado confuso agora. O que é o Linux então? O que é GNU? Simplesmente, várias pessoas uma versões modificadas dos sistemas GNU, pensando que é o Linux em si. Os programadores que trabalham com ele, sabem que o Linux, é basicamente o kernel, conforme já foi dito, mas todos, chamam esse conjunto de Linux (há quem defenda o uso de GNU/Linux). 

Finalizando, o projeto GNU é um dos responsáveis pelo sucesso do Linux, pois graças à “mistura” de seus programas com o kernel desenvolvido por Linus Torvalds, o Linux vem mostrando porque é um sistema operacional digno de habilidades insuperáveis por qualquer outro sistema.

quinta-feira, 21 de abril de 2011

Dispositivos e Partições no Linux

Nesse post tentarei colocar de uma maneira simples, rápida e fácil, dicas de como lidar com suas partições e dispositivos. Procurarei manter sempre uma comparação com o Windows para ninguém se perder.

HDs
Diferente do que acontece no Windows, no Linux vê-se todos os dispositivos como colaboradores do sistema, e estes serão encontrados no diretório /dev . Sendo assim, se seu modem estiver na COM 2, no Linux ele aparecerá no diretório /dev/ttyS1 , e assim por diante. Como estamos falando de discos, farei uma rápida tabelinha para orientação.

Bios Windows Linux
Primário MasterC:/dev/hda
Primário SlaveD:/dev/hdb
Secundário MasterE:/dev/hdc
Secundário SlaveF:/dev/hdd

Claro que neste caso estamos falando de disco IDE. Para cada particão criada em um disco, diferente do Windows que gera um novo nome para a partição, o Linux da um número a mesma. Vamos imaginar que trabalharemos com o primário master ou como chamaremos sempre a partir de agora hda. Vamos supor que temos um HD de 10Gb, o dividimos em 3 partições, uma de 256Mb pra swap, uma de 4Gb para o root ("../xml/introducao-xml//"), e o resto para o /usr. Com isso seu disco ficará da seguinte forma.
/dev/hda1
/dev/hda2
/dev/hda3
Existe ainda um porém, caso queira acessar arquivos em um sistema com formato diferente do ext2, tipo uma partição Windows (vfat), DOS (msdos), CD-ROM (iso9660, joliet), entre outros, será necessário ter um kernel compilado com suporte a esses formatos.
Por exemplo, para montar sua partição Windows (vfat) localizada em /dev/hda1 use o comando:
mount -t vfat /dev/hda1 /mnt/windows
Outro ponto importante é dizer ao mount qual o tipo de partição ele está montando com a opção "-t", os tipos padrões são:
  • vfat: para partições Windows com FAT16 ou FAT32
  • msdos: para partições DOS
  • iso9660: para alguns CD-ROMs
  • joliet: também utilizado para CD-ROMs
Fiz essa introdução, para que todos pudessem entender como é o sistema de utilização de discos no 1 .

CD-ROMs e floppys
Agora, falaremos como usar seu CD-ROM no Linux. Primeiro verifique onde está o seu CD-ROM. Digamos que esteja no hdc. Existem várias maneiras de acessá-lo. A primeira, na mão com o comando: mount -t iso9660 /dev/hdc /mnt/cdrom . A outra é, adicionando essa linha ao arquivo /etc/fstab :
/dev/hdc /cdrom iso9660 defaults,ro,user,noauto 0 0
E para montar o CD-ROM basta dar o comando: mount /mnt/cdrom ou mount /dev/hdc . O Linux verifica para ver se existe essa entrada no fstab e a monta. O comando mount só pode ser usado pelo super-usuário (root). Uma vez montado o cd-rom, qualquer usuário pode utilizá-lo, com as devidas permissões de uso. Quando o seu CD-ROM estiver montado, não será possível tirar o CD do driver, isto porque é incorreto fazê-lo enquanto o cd estiver sendo lido. Muitas pessoas falam: "Ahh, mais meu Windows faz isso!"../xml/introducao-xml/. Realmente, ele faz, mas a própria Microsoft, em um comunicado, diz que não se responsabiliza por danos causados pelo fato do CD estar sendo lido e um usuário abrir o driver. Para poder tirar o cd do driver é preciso desmontar o CD-ROM com o comando: umount /mnt/cdrom ou umount /dev/hdc . Feito isso, pode-se tirar o cd do driver.
Com o disquete também não é diferente, a diferença é onde o disquete fica no diretório /dev . Geralmente é no /dev/fd0 , pode-se montá-lo na mão ou então criar a entrada no /etc/fstab :
dev/fd0 /floppy auto defaults,user,noauto 0 0
Existem alguns programas que se dispõe a montar seus discos e outros dispositivos automaticamente, como o automount. Isso ajuda bastante se existem muitos usuários na máquina, se não quiser dar permissões de root para os mesmos. Ou pode-se adicioná-los no grupo do CD-ROM e do floppy também. O problema de programas como o automount é que ele realmente monta o dispositivo quando precisa ser utilizado, mas não sabe a hora correta de desmontá-lo, no próprio automount-HOWTO tem um script para fazer isso. Caso queira dar uma olhada vá em http://linuxdoc.org/HOWTO/mini/Automount.html .

terça-feira, 12 de abril de 2011

Permissões de arquivos no Linux

"O Linux é um sistema multiusuário". Você já deve ter ouvido esta frase muitas vezes. Isto significa que um mesmo PC ou servidor pode ser acessado por vários usuários simultâneamente.
Com isto, surge a necessidade de algum sistema de segurança que limite o que cada usuário pode fazer no sistema, para que não haja o risco de que um usuário possa destruir arquivos ou configurações do sistema ou de outros usuários.
Isto é feito através das permissões de arquivos. Clicando sobre as propriedades de qualquer arquivo no konqueror você verá uma janela com 9 campos, que permitem dar permissão de leitura, gravação e execução (que alguém traduziu para "inserir" na versão em Português :-) para o usuário dono do arquivo, para outros usuários que pertencem ao mesmo grupo que ele e finalmente a todos os demais usuários. O "dono" do arquivo é por default o usuário que criou o arquivo. Apenas este usuário pode alterar as permissões de acesso ao arquivo e pasta. Em seguida vem o grupo, que permite que vários usuários tenham acesso a um arquivo ou pasta, sem ter que apelar para o campo "outros" que daria acesso a qualquer um. Imagine que estamos configurando um servidor em uma empresa importante e neste servidor temos uma pasta chamada "projeto_apollo" com vários arquivos confidenciais que deverá ser acessada apenas pelos programadores que estão trabalhando no projeto. Desativaríamos de imediato o campo "todos" mantendo marcados apenas os campos "usuário" e "grupo". O próximo passo seria justamente criar um novo grupo de usuários ("apollo" por exemplo) e incluir neste grupo todos os usuários que fazem parte do projeto. A partir daí, todos os programadores passariam a ter acesso à pasta, já que fazem parte do grupo. Você pode criar novos grupos e adicionar usuários a eles através do programa "kuser" que faz parte do KDE e por isso é encontrado em quase todas as distribuições. Basta chama-lo pelo terminal.Basta clicar em "Grupo > Novo", fornecer o nome do novo grupo e em seguida clicar no botão "Edit" para marcar os usuários que farão parte dele. Caso o kuser não esteja instalado no seu sistema, uma segunda opção é o "userconf". No Mandrake você pode utilizar também o "userdrake". Você pode criar quantos usuários e quantos grupos quiser, e cada usuário pode fazer parte de quantos grupos for necessário. Ou seja, você pode por exemplo criar um grupo para cada pasta importante e adicionar no grupo apenas os usuários que tiverem acesso a ela. De fato, a configuração default da maioria das distribuições linux atuais é dar acesso de leitura para a maioria das pastas (com excessão naturalmente dos arquivos de senha e outros arquivos críticos) para todos os usuários, mas ao mesmo tempo dar acesso de gravação apenas para o diretório home de cada um. Ou seja, por default você, logado como usuário normal, poderá navegar por quase todos os diretórios do sistema, mas só poderá criar e alterar arquivos dentro da sua pasta de usuário. Nos outros lugares receberá sempre um aviso de acesso negado. Isso impede que os usuários possam fazer besteira no sistema, como por exemplo, tentar deletar a pasta de módulos do Kernel. Claro, como todas as regras, as permissões de acesso têm um única exceção: o root. Ele é o único que não possui restrições: pode alterar, executar ou deletar o que bem entender. Pode alterar o dono das pastas ou alterar as permissões de acesso. O root é o Deus do sistema. Você precisará usar o root sempre que for alterar as permissões de acesso a uma pasta do sistema ou criada por outro usuário, mas não use-o regularmente, a menos que esteja apenas brincando com o sistema e possa reinstala-lo a qualquer momento, pois além de poder destruir facilmente arquivos do sistema, usar o root abre as portas para várias brechas de segurança ao usar programas de IRC, abrir anexos em e-mails ou mesmo navegar na web.
A maioria dos problemas de segurança a que os usuários do Windows estão submetidos, decorre justamente do fato de utilizarem contas com privilégios equivalentes ao do root no Linux. Se você pode fazer o que quiser no sistema, os programas executados por você (incluindo trojans, scripts incluídos de páginas web executados pelo navegador, etc.) também poderão não terão restrições.
Se você se pergunta às vezes como alguns vírus como o Ninda e o Sircan podem se espalhar tão rapidamente, saiba que o problema é justamente este: a combinação de um sistema com um fraco controle de segurança, combinado combinado com o uso de contas administrativas por usuários sem noções de segurança. Voltando ao tema da criação de usuários, se você não gostou dos utilitários gráficos, pode adicionar novos usuários também usando os comandos "adduser" e "passwd"
Por exemplo:

adduser morimoto
(cria o usuário morimoto)

passwd morimoto
(altera o password do user morimoto)

O comando passwd também pode ser usado para alterar a senha. Como root você deve usar "passwd usuario" e como usuário apenas "passwd" para alterar a senha do login. Apenas o root pode adicionar novos usuários ao sistema.
Para alterar as permissões de acesso de arquivos e pastas via linha de comando você deve usar o comando chmod. A sintaxe dele parece um pouco complicada à primeira vista, mas nada que um pouco de prática não possa resolver:
# chmod 744 arquivo

Temos aqui o comando chmod propriamente dito, o arquivo ou pasta que terá suas permissões de acesso alteradas e um número de três dígitos que indica as novas permissões para o arquivo.
Os três números indicam respectivamente:
7 : Permissões para o dono do arquivo4 : Permissões para o grupo4 : Permissões para os demais usuários

Você deve lembrar que temos três permissões: leitura, gravação e execução. Como é possível representar estes três atributos através de um único número?
Bem, os programadores costumam ser muito bons em matemática e, como em outros casos, usaram um pequeno truque para resolver este problema:
Cada permissão possui um número:
4 : Leitura2 : Gravação1 : Execução

Você simplesmente soma estes números para ter o número referente ao conjunto de permissões que deseja:
0 : Sem permissão alguma, se for uma pasta o usuário sequer pode ver o conteúdo1 : Só execução (não é possível ler o arquivo ou alterá-lo, apenas executar um programa)4 : Apenas leitura6 (4+2) : Leitura + gravação7 (4+2+1): Controle total: leitura + gravação + execução

Engenhoso não é? Se você quer dar controle total do arquivo ou pasta para o dono e para o grupo, mas permissão de apenas leitura para os demais usuários, usaria o número 774; se você quisesse que todos os usuários tivessem permissão de leitura e gravação, mas sem poder executar nada, usaria o número 666, se quisesse dar controle total para todo mundo usaria 777 e assim por diante. Como disse, parece um pouco complicado, mas depois de usar o comando algumas vezes você não vai esquecer mais.
Para alterar o dono e o grupo do arquivo você deve usar o comando chown. O uso dele é simples, basta indicar qual é o novo dono e em seguida indicar o arquivo ou pasta que mudará de dono, como em:

# chown morimoto apollo

Se você quiser que a alteração se aplique a todos os arquivos e subpastas do diretório, use a opção -R (de recursivo) como em:

# chown -R morimoto apollo

Se você quiser alterar também o nome do grupo, acrescente o nome do novo grupo após o nome do dono, separando ambos por um ponto:
# chown -R morimoto.apollo apollo

Agora a pasta "apollo" passa a ser propriedade do usuário morimoto e do grupo apollo. Fizemos a mesma coisa que no exemplo anterior, mas agora usando o comando de modo texto. Você escolhe qual forma prefere.
Além dos comandos que vimos, você também pode recorrer ao mc, encontrado na maioria das distribuições. Basta chama-lo no terminal. Além de ser um gerenciador de arquivos com muitos recursos, ele permite editar arquivos de texto, mover arquivos, alterar permissões, etc.

Criando Pastas no Linux

Na aula de GSO nessa terça, aprendemos um pouco sobre a criação e alteração de propriedades de pastas. Com isso, resolvi fazer uma postagem com esse assunto relacionado ao nosso tema, que é o Sistema Operacional Linux. Segue ai uma pequena introdução desse recurso no Linux:


O sistema Linux, quando se inicializa, assim como todo sistema operacional ele interage com o hardware do computador, preparando e deixando pronto para uso os recursos da máquina, para que você possa rodar seus programas. O Linux "puro" seria sem uma "interface gráfica", sem janelas de programas, por exemplo. 


Primeiro choque para quem está chegando agora é a estrutura de diretórios do Linux, que não lembra em nada o que temos no Windows. Basicamente, no Windows temos os arquivos do sistema concentrados nas pastas C:\Windows\ e C:\Arquivos de programas\ e você pode criar e organizar suas pastas da forma que quiser.

No Linux é basicamente o contrário. O diretório raiz está tomado pelas pastas do sistema e espera-se que você armazene seus arquivos pessoais dentro da sua pasta no diretório /home.

Mas, as diferenças não param por aí. Para onde vão os programas que são instalados se não existe uma pasta central como a arquivos de programas? E para onde vão os arquivos de configuração se o Linux não possui nada semelhante ao registro do Windows?

A primeira coisa com que você precisa se habituar é que no Linux os discos e partições não aparecem necessariamente como unidades diferentes, como o C:, D:, E: do Windows. Tudo faz parte de um único diretório, chamado diretório raiz ou simplesmente "/".

Dentro deste diretório temos não apenas todos arquivos e as partições de disco, mas também o CD-ROM, drive de disquete e outros dispositivos, formando a estrutura que você está vê quando abre o gerenciador de arquivos.

O diretório */bin* armazena os executáveis de alguns comandos básicos do sistema, como o su, tar, cat, rm, pwd, etc. Geralmente isto soma de 5 a 7 MB, pouca coisa. O grosso dos programas ficam instalados dentro do diretório */usr* (de "Unix System Resources"). Este é de longe o diretório com mais arquivos em qualquer distribuição Linux, pois é aqui que ficam os executáveis e bibliotecas de todos os principais programas. A pasta */usr/bin* (bin de binário) por exemplo armazena cerca de 2.000 programas e atalhos para programas numa instalação típica do Linux. Se você tiver que chutar em que pasta está o executável de um programa qualquer, o melhor chute seria justamente a pasta /usr/bin :-)

Outro diretório populado é o */usr/lib*, onde ficam armazenadas bibliotecas usadas pelos programas. A função destas bibliotecas lembra um pouco a dos arquivos .dll no Windows. As bibliotecas com extensão .a são bibliotecas estáticas, enquanto as terminadas em .so.versão (zzz.so.1, yyy.so.3, etc.) são bibliotecas compartilhadas, usadas por vários programas.

Subindo de novo, a pasta */boot* armazena (como era de se esperar) o Kernel ("coração" do sistema) e alguns arquivos usados pelo Lilo (o gerenciador de boot do sistema, caso você esteja utilizando o Lilo), que são carregados na fase inicial da inicialização do computadoer. Estes arquivos são pequenos, geralmente ocupam menos de 5 MB.

Logo abaixo temos o diretório /dev, que é de longe o exemplo mais exótico de estrutura de diretório no Linux. Todos os arquivos contidos aqui, como por exemplo /dev/hda, /dev/dsp, /dev/modem, etc. não são arquivos armazenados no HD, mas sim "links" para dispositivos de hardware. Por exemplo, todos os arquivos gravados no "arquivo" */dev/dsp* serão reproduzidos pela placa de som, enquanto o "arquivo" */dev/ttyS0* contém os dados enviados pelo mouse (ou outro dispositivo conectado na porta serial 1).

Esta organização visa facilitar a vida dos programadores, que podem acessar o hardware do micro simplesmente fazendo seus programas lerem e gravarem em arquivos. Não é preciso nenhum comando esdrúxulo para tocar um arquivo em Wav, basta "copiá-lo" para o arquivo */dev/dsp*, o resto do trabalho é feito pelo próprio sistema. O mesmo se aplica ao enviar um arquivo pela rede, ler as teclas do teclado ou os clicks do mouse e assim por diante.








quinta-feira, 31 de março de 2011

Encontramos no youtube um vídeo bem simples, sobre a história do unix que conta com um depoimento de Ken Thompson, um dos programadores que criou o Unix, vejam:

sábado, 26 de março de 2011

VANTAGENS:

            O Linux é sem dúvida a melhor opção de Unix para PC, pois possui todas as características de um UNIX moderno, tais como: multitarefa real, multiusuário, memória virtual, biblioteca compartilhada, interface gráfica (X Windows), entre outros. O Linux possui centenas de comandos embutidos, chamados utilitários e ferramentas, cada ferramenta é um programa distinto, destinado a fazer uma tarefa específica de forma rápida e eficaz. Como é um sistema aberto é extremamente flexível (o utilizador tem acesso ao fonte do sistema) é outro ponto positivo.
            Diversos grupos de estudo do Linux no mundo inteiro garantem actualizações do software praticamente mensais. Além disto, cada nova versão contem dispositivos periféricos que são lançados no mercado.
            O Linux tem um excelente mercado a nível académico, o que faz com que possa haver constantes melhoras no software, pois grande parte dos melhores professores/pesquisadores de sistemas operacionais colaboram para o seu desenvolvimento tecnológico.

DESVANTAGENS:

            O suporte técnico é um dos pontos fracos do sistema, é feito basicamente através da Internet. Além disto, a documentação do Linux é escassa, apesar de já haver muitas revistas do género e maioritariamente a informação vem de fontes na Internet.  
O número de aplicativos é limitado e não existe perspectiva de entrada de grandes companhias de software desenvolvendo aplicativos para Linux, sem aplicativos não há como um sistema se tornar popular no mundo dos PCs.
            O sistema de arquivos varia de uma distribuição para outra, tornado difícil a vida do administrador de sistema, que muitas vezes tem dificuldade de descobrir o que é essencial em cada subdirectoria, limpar, criar, preparar, verificar, encontrar e montar outros sistemas de arquivos (possivelmente em máquinas remotas), todas estas tarefas podem ser dificultadas se não encontrarmos os arquivos aonde esperamos.
            A administração e a operação de um modo geral é bem mais complexa em um ambiente Unix, inclusive o Linux, do que no ambiente DOS/Windows, o que dificulta sua popularização.

sexta-feira, 25 de março de 2011

Um pouco da história do UNIX

O projeto GNU (G is not Unix) é mais antigo (1983) que o Linux (que se refere ao Kernel desenvolvido por Linus Torvalds em 1989), a questão é que o GNU era praticamente um SO pronto, com interpretador de comandos e algumas aplicações, porém lhe faltava o Kernel (núcleo do sistema operacional), Richard Stallman soube da mensagem enviada por Linus nos tempos da Usenet e chegaram na conclusão que ambos estavam desenvolvendo um novo Sistema Operacional de código fonte aberto com basicamente o mesmo objetivo e filosofia, um possuia o Kernel pronto e outro possuia todo o sistema porém sem Kernel, em 1992 o Projeto GNU se juntou ao Linux e nascia então o GNU/Linux.

Algumas curiosidades históricas:

1) O Unix foi precedido por um sistema chamado Multics desenvolvido pela Bell Labs (AT&T), General Eletric e MIT, o Multics era um sistema monousuário e monotarefa e não conseguiu atingir seu propósito, ainda sim o último sistema rodando Multics só foi desativado em 30 de Agosto de 2000 exatamente as 17:08 UTC no Canadá.

2) Dois engenheiros da AT&T, Ken Thompson e Dennis Ritchie fanáticos por um jogo chamado Space Travel perderam acesso ao sistema e decidiram portar o jogo para um computador PDP-7 que estava parado, nascia um novo sistema operacional que a princípio foi chamado de Unics, o novo SO foi assim chamado pois ao contrário do Multics era multitarefa (time sharing) e multiusuário e Ken Thompson achou engraçado fazer essa alusão ao Multics, o mais interessante do Unics é que este foi idealizado para ser altamente "portável" e rodar em praticamente qualquer hardware existente, uma das premissas de sua criação era construir um SO de programador para programadores, mais tarde o Unics foi portado para uma máquina PDP-11, posteriormente o Unics foi escrito em linguagem C (linguagem também criada por Dennis Ritchie) e devido a essa particularidade finalmente o Unics se tornava realmente um sistema portável.

3) Não se sabe ao certo quando e porquê o Unics veio a ser chamado de Unix, algumas teorias dizem que foi por puro marketing, outros dizem que era uma limitação do sistema em usar um nome com 5 caracteres, a teoria mais plausível é a da própria Bell Labs que diz que o Unix assim como a Fenix ressurgiu das próprias cinzas graças ao esforço multiorganizacional de seus idealizadores em criar um sistema multitarefa seguro, esse trabalho em equipe e a filosofia em que o sistema foi concebido era algo inimaginável nos anos 60, desde então o Unics passou a ser chamado Unix herdando a letra "x" da "Fenix".

4) Richard Stallman decidiu criar um SO do tipo Unix gratuito pq muitos programadores que contribuíram para o aperfeiçoamento do Unix foram injustiçados quando a AT&T decidiu se apropriar do sistema que fora fruto do trabalho destes.

5) Ao contrário do que muitos pensam Linus Torvalds não escreveu o Linux Kernel do zero, reza a lenda que Linus ao ver seu tio sofrendo na pobre interface shell do DOS decidiu escrever um sistema operacional mais flexível e poderoso, que fosse multi-tarefa e lhe permitisse explorar mais o hardware disponível.Para isso ele usou como base o Kernel do Minix (SO tipo Unix escrito por Andrew Tannenbaum)

6) Assim como acontece no GNU/Linux o Unix também possui muitas variantes, o que dificulta um pouco o trabalho dos profissionais dessa área, conceitualmente as variantes Unix se diferem das variantes GNU/Linux pois as primeiras são adaptadas ao hardware específico de um fabricante, temos como exemplo o HP-UX da HP, o AIX da IBM, o Solaris da SUN (que possui também versão para plataforma x86), o Irix da Silicon Graphics, entre outros.

7) Aqui acho que vou assustar muita gente, muitos associam a Microsoft só ao Windows mas até ela já teve seu Unix que se chamava Xenix, posteriormente esse foi vendido para a SCO mas ainda sim serviu de base para o desenvolvimento do MS-DOS, aliás o MS-DOS embora conceitualmente seja muito diferente do Unix estruturalmente possui várias semelhanças, como redirecionamento de dispositivos de I/O, pipes "|", estruturas de arquivos e alguns comandos.


sexta-feira, 18 de março de 2011

UNIX

O Unix é um sistema operacional portátil, multitarefa e multiusuário.
O unix começou como um passatempo de um jovem pesquisador e tornou-se um empreendimento que gera bilhões de dólares envolvendo universidades, corporações multinacionais, agências governamentais, e entidades internacionais de padronização.
Nosanos 40 e 50, existia um problema da maneira que os computadores eram utilizados, ou seja, era preciso o usuário enviar ao centro de processamento de dados um job em cartões perfurados, para que estes fossem processados. 
Para tentar solucionar tal impasse, o sistema de compartilhamento de tempo foi inventado no Darmouth College e no M.I.T. Em pouco tempo, os pesquisadores do M.I.T se juntaram ao da General Electric e os do Bell Labse desenvolveram um sistema de segunda geração,esse não fez sucesso, pois ele foi escrito em PL/I - uma linguagem muito pesada, com compilador muito ineficiente.
Com esse fracasso, a equipe do Bell Labs fez com que um de seus pesquisadores, Ken Thompson , começasse a reescrever o Multics, em linguagem de máquina usando um PDP-7. A denominação veio a partir de outro pesquisador, Brian Kernighan, chamando o sistema de Unics.O trabalho de Thompson teve logo adesão de Dennis Ritchie. A partir daí, o unix saiu do PDP-7 para os então modernos PDP-11/20, logo depois PDP-11/45 e para o PDP-11/70, sendo que estas duas últimas máquinas dominaram o mercado durante toda a década de 70. Com estas evoluções, Thompson reescreveu o Unix na linguagem B e posteriormente Ritchie desenvolveu a linguagem C, e escreveu um compilador para ela.
Em 1974, Ritchie e Thompson publicaram um artigo sobre o Unix, que teve seu devido reconhecimento com o recebimento do Turing Award. Com isso muitas universidades começaram a solicitar ao Bell Labs cópias do Unix. Apesar do compilador C ser muito eficiente e rápido, ele só gerava código objeto para o PDP-11 além de considerar que todos os números inteiros eram de 16 bits, que todos os ponteiros eram de 16 bits também, e que a máquina possuia três registradores disponíveis para armazenamento temporário.
Uma das primeiras universidades a adquirir o Unix versão 6 foi a University of California at Berkeley, com o código fonte disponível. Sendo assim o pessoal de Berkeley, foi capaz de analisar e modificar o sistema, chegando a produzir o 1SBD.
Em 1983 é lançado o System V da AT&T e o 4.2 BSD. O SV incluía o pacote IPC (shm, msg, sem) para comunicação entre processos. 
Surgiram outras versões do SV com a inclusão de novas características como sharedlibs no SVR4.O 4.2BSD foi talvez uma das mais importantes versões do UNIX. O seu software de conexão de redes tornava muito fácil a tarefa de conectar computadores UNIX a redes locais. Nessa versão é que foram integrados os softwares que implementam TCP/IP e sockets.
Em 1988 foi lançado o SVR4. Este sistema era um merge de releazes anteriores do SV, BSD e SunOs, uma implementação decendente de BSD. 
O 4.4BSD foi lançado em 1992 para várias plataformas: HP 9000/300, Sparc, 386, DEC e outras, mas não em VAX. Entre as novas características estão: Novo sistema de memória virtual baseado em Mach 2.5 e Suporte ISO/OSI (baseado em ISODE)
A nova versão, SunOs 5.x está baseada no SVR4, embora tenha herdado algumas características do SunOs 4.x. O novo sistema operacional da Sun, Solaris 2.x, é um SO que engloba SunOs 5.x, Open Network Computing e Open Windows.

sexta-feira, 4 de março de 2011

Cloud Computing (Computação nas nuvens) - Continuação

* Software as a Service (SaaS)

Intimamente ligado à Cloud Computing está o conceito de Software as a Service (SaaS) ou, em bom português, Software como Serviço. Em sua essência, trata-se de uma forma de trabalho onde o software é oferecido como serviço, assim, o usuário não precisa adquirir licenças de uso para instalação ou mesmo comprar computadores ou servidores para executá-lo. Nesta modalidade, no máximo, paga-se um valor periódico - como se fosse uma assinatura - somente pelos recursos utilizados e/ou pelo tempo de uso.
Para entender melhor os benefícios do SaaS, suponha que uma empresa que tem vinte funcionários necessita de um software para gerar folhas de pagamento. Há várias soluções prontas para isso no mercado, no entanto, a empresa terá que comprar licenças de uso do software escolhido e, dependendo do caso, até mesmo hardware para executá-lo. Muitas vezes, o preço da licença ou mesmo dos equipamentos pode gerar um custo alto e não compatível com a condição de porte pequeno da empresa.
Se, por outro lado, a empresa encontrar um fornecedor de software para folhas de pagamento que trabalha com o modelo SaaS, a situação pode ficar mais fácil: essa companhia poderá, por exemplo, oferecer esse serviço através de Cloud Computing e cobrar apenas pelo número de usuários e/ou pelo tempo de uso.
Dessa forma, a empresa interessada paga um valor baixo pelo uso da aplicação. Além disso, hardware, instalação, atualização, manutenção, entre outros, ficam por conta do fornecedor. Também é importante levar em conta que o intervalo entre a contratação do serviço e o início de sua utilização é extremamente baixo, o que não aconteceria se o software tivesse que ser instalado nos computadores do cliente. Este só precisa se preocupar com o acesso ao serviço (no caso, uma conexão à internet) ou, se necessário, com a simples instalação de algum recurso mínimo, como um plugin no navegador de internet de suas máquinas.
IBM e HP são dois exemplos de companhias que já oferecerem soluções em SaaS: HP SaaS; IBM SaaS.
Há também conceitos derivados, utilizados por algumas companhias para diferenciar os seus serviços, entre eles:
- Platform as a Service (PaaS): Plataforma como Serviço. Trata-se de um tipo de solução mais amplo para determinadas aplicações, incluindo todos (ou quase todos) os recursos necessários à operação, como armazenamento, banco de dados, escalabilidade (aumento automático da capacidade de armazenamento ou processamento), suporte a linguagens de programação, segurança e assim por diante;
- Database as a Service (DaaS): Banco de Dados com Serviço. O nome já deixa claro que esta modalidade é direcionada ao fornecimento de serviços para armazenamento e acesso de volumes de dados. A vantagem aqui é que o detentor da aplicação conta com maior flexibilidade para expandir o banco de dados, compartilhar as informações com outros sistemas, facilitar o acesso remoto por usuários autorizados, entre outros;
- Infrastructure as a Service (IaaS): Infraestrutura como Serviço. Parecido com o conceito de PaaS, mas aqui o foco é a estrutura de hardware ou de máquinas virtuais, com o usuário tendo inclusive acesso a recursos do sistema operacional;
- Testing as a Service (TaaS): Ensaio como Serviço. Oferece um ambiente apropriado para que o usuário possa testar aplicações e sistemas de maneira remota, simulando o comportamento destes em nível de execução.

* Exemplos de aplicações em Cloud Computing

Os termos Cloud Computing e Computação nas Nuvens são relativamente recentes, como você já sabe, mas se analisarmos bem, veremos que a ideia não é, necessariamente, nova. Serviços de e-mail, como Gmail e Yahoo! Mail; discos virtuais na internet, como Dropbox; sites de armazenamento e compartilhamento de fotos ou vídeos, como Flickr e YouTube. Todos são exemplos de aplicações que, de certa forma, estão dentro do conceito de Cloud Computing. Note que todos esses serviços não executam no computador do usuário e este pode acessá-los de qualquer lugar, muitas vezes sem necessidade de instalar aplicativos em sua máquina ou de pagar licenças de software. No máximo, paga-se um valor periódico pelo uso do serviço ou pela contratação de recursos adicionais, como maior capacidade de armazenamento de dados, por exemplo.
Abaixo, uma breve lista de serviços que incorporam bem o conceito de Cloud Computing:
- Google Apps: esse é um pacote de serviços que o Google oferece que contém aplicativos de edição de texto, planilhas e apresentações (Google Docs), serviço de agenda (Google Agenda), comunicador instantâneo integrado (Google Talk), e-mail com o domínio da empresa (por exemplo, contato@infowester.com), entre outros. Todos esses serviços são processados pelo Google e o cliente só precisa criar as contas do usuário. O Google Apps oferece pacotes gratuitos e pagos, de acordo com o número de usuários. Um dos maiores clientes do Google Apps é a Procter & Gamble, que contratou os serviços para mais de 130 mil colaboradores;
- Amazon: a Amazon é um dos maiores serviços de comércio eletrônico do mundo. Para suportar o volume de vendas no período de Natal, a empresa montou uma superestrutura de processamento e armazenamento de dados, que acaba ficando ociosa na maior parte do ano. Foi a partir daí que a companhia teve a ideia de "alugar" esses recursos, com serviços como o Simple Storage Solution (S3), para armazenamento de dados, e Elastic Compute Cloud (EC2), para uso de máquinas virtuais. É possível saber mais sobre as soluções oferecidas pela Amazon nesta página;
- Live Mesh: esta é um tecnologia da Microsoft direcionada ao segmento doméstico. Sua proposta principal é a de permitir que o usuário acesse o seu desktop e seus documentos de qualquer computador, com a diferença de que todos os seus arquivos ficam nas nuvens, isto é, no servidores da Microsoft. Para saber mais sobre esse serviço, veja esta matéria publicada no Blog InfoWester;
- Panda Cloud Antivirus: como o nome indica, este é um programa antivírus da Panda Software, mas com uma grande diferença: a maior parte do trabalho necessário à ferramenta para pesquisar e eliminar malwares fica por conta das "nuvens". Com isso, de acordo com a Panda, essa solução acaba evitando que o antivírus deixe o computador lento;
- Aprex: brasileiro, o Aprex oferece um conjunto de ferramentas para uso profissional, como calendário, gerenciador de contatos, lista de tarefas, disco virtual, blog, serviço de e-mail marketing, apresentações, entre outros. Tudo é feito pela Web e, no caso de empresas, é possível até mesmo inserir logotipo e alterar o padrão de cores das páginas. Há opções de contas gratuitas e pagas.

* Conclusão
Na verdade, qualquer tentativa de definir o que é Cloud Computing pode não ser 100% precisa. Isso porque as ideias por trás da noção de Computação nas Nuvens são muito novas e as opiniões de especialistas em computação ainda divergem. Mas a noção básica é a que foi explicada neste artigo.
É claro que ainda há muita coisa por fazer. Por exemplo, a simples ideia de determinadas informações ficarem armazenadas em computadores de terceiros (no caso, os fornecedores de serviço), mesmo com documentos garantindo a privacidade e o sigilo, preocupam pessoas e, principalmente, empresas, motivo pelo qual esse ponto precisa ser melhor estudado. Além disso, há outras questões, como o problema da dependência de acesso à internet: o que fazer quando a conexão cair? Algumas companhias já trabalham em formas de sincronizar aplicações off-line com on-line, mas tecnologias para isso ainda precisam evoluir bastante.
De qualquer forma, o futuro aponta para esse caminho. Além das mencionadas empresas neste artigo, companhias como Dell, Intel, Oracle e Microsoft já estão trabalhando nas mais variadas soluções para Cloud Computing. Esta última, por exemplo, já até anunciou o Azure, uma plataforma própria para a execução de aplicações nas "nuvens".


Cloud Computing (Computação nas nuvens)

* O que é Cloud Computing (Computação nas nuvens)?

A denominação Cloud Computing é conhecida no Brasil como Computação nas Nuvens ou Computação em Nuvem. Nesse post você entenderá melhor sobre esse conceito.

* Entendendo a Cloud Computing

Estamos habituados a utilizar aplicações instaladas em nossos próprios computadores, assim como a armazenar arquivos e dados dos mais variados tipos neles. No ambiente corporativo, esse cenário é um pouco diferente, já que nele é mais fácil encontrar aplicações disponíveis em servidores que podem ser acessadas por qualquer terminal autorizado por meio de uma rede. A principal vantagem desse modelo está no fato de ser possível, pelo menos na maioria das vezes, utilizar as aplicações mesmo sem acesso à internet ou à rede. Em outras palavras, é possível usar esses recursos de maneira off-line. Entretanto, todos os dados gerados estarão restritos a esse computador, exceto quando compartilhados em rede, coisa que não é muito comum no ambiente doméstico. Mesmo no ambiente corporativo, isso pode gerar algumas limitações, como a necessidade de se ter uma licença de um determinado software para cada computador, por exemplo.
A evolução constante da tecnologia computacional e das telecomunicações está fazendo com que o acesso à internet se torne cada vez mais amplo e cada vez mais rápido. Em países mais desenvolvidos, como Japão, Alemanha e Estados Unidos, é possível ter acesso rápido à internet pagando-se muito pouco. Esse cenário cria a situação perfeita para a popularização da Cloud Computing, embora esse conceito esteja se tornando conhecido no mundo todo, inclusive no Brasil. Com a Cloud Computing, muitos aplicativos, assim como arquivos e outros dados relacionados, não precisam mais estar instalados ou armazenados no computador do usuário ou em um servidor próximo. Esse conteúdo passa a ficar disponível nas "nuvens", isto é, na internet. Ao fornecedor da aplicação cabe todas as tarefas de desenvolvimento, armazenamento, manutenção, atualização, backup, escalonamento, etc. O usuário não precisa se preocupar com nada disso, apenas com acessar e utilizar. Um exemplo prático desta nova realidade é o Google Docs, serviço onde os usuários podem editar textos, fazer planilhas, elaborar apresentações de slides, armazenar arquivos, entre outros, tudo pela internet, sem necessidade de ter programas como o Microsoft Office ou OpenOffice.org instalados em suas máquinas. O que o usuário precisa fazer é apenas abrir o navegador de internet e acessar o endereço do Google Docs para começar a trabalhar, não importando qual o sistema operacional ou o computador utilizado para esse fim. Neste caso, o único cuidado que o usuário deve ter é o de utilizar um navegador de internet compatível, o que é o caso da maioria dos browsers da atualidade. 

* Algumas características da Cloud Computing

Conforme já dito, uma das vantagens da Cloud Computing é a possibilidade de utilizar aplicações diretamente da internet, sem que estas estejam instaladas no computador do usuário. Mas, há outras significativas vantagens:
- na maioria dos casos, o usuário pode acessar determinadas aplicações independente do seu sistema operacional ou de hardware;
- o usuário não precisa se preocupar com a estrutura para executar a aplicação: hardware, procedimentos de backup, controle de segurança, manutenção, entre outros, ficam a cargo do fornecedor do serviço;
- compartilhamento de dados e trabalho colaborativo se tornam mais fáceis, uma vez que todos os usuários acessam as aplicações e os dados do mesmo lugar: a "nuvem". Muitas aplicações do tipo já são elaboradas considerando essas possibilidades;
- dependendo do fornecedor, o usuário pode contar com alta disponibilidade, já que, se por exemplo, um servidor parar de funcionar, os demais que fazem parte da estrutura continuam a oferecer o serviço;
- o usuário pode contar com melhor controle de gastos. Muitas aplicações em Cloud Computing são gratuitas e, quando é necessário pagar, o usuário só o fará em relação aos recursos que usar ou ao tempo de utilização. Não é, portanto, necessário pagar por uma licença integral de uso, tal como acontece no modelo tradicional de fornecimento de software;
- dependendo da aplicação, o usuário pode precisar instalar um programa cliente em seu computador. Mas, neste caso, todo ou a maior parte do processamento (e até mesmo do armazenamento de dados) fica por conta das "nuvens".
Note que, independente da aplicação, com a Cloud Computing o usuário não necessita conhecer toda a estrutura que há por trás, ou seja, ele não precisa saber quantos servidores executam determinada ferramenta, quais as configurações de hardware utilizadas, como o escalonamento é feito, onde está a localização física do datacenter, enfim. O que importa ao usuário é saber que a aplicação está disponível nas nuvens, não importa de que forma.


(...) Continua no próximo post.