Essa é a pergunta recorrente na área de desenvolvimento web atualmente, e muitos já responderam, mas poucos mostram de fato como fazer para começar a desenvolver de acordo com a futura especificação do HTML, sem esbarrar nas diferenças de implementação de cada navegador. Muitos já responderam essa pergunta, mas poucos mostram como é possível fazer com que o HTML funcione direito em navegadores antigos, como Internet Explorer 6, 7 e 8.

E a pergunta que não quer calar: já é viável fazer sites em HTML5?

Sim e com certeza você já pode usar HTML5 para desenvolver websites e aplicativos web (este site já usa). Isso porque muitas funcionalidades já estão implementadas nos navegadores modernos, sem deixar de apresentar um conteúdo acessível para os mais antigos. Esse princípio inclusive faz parte da especificação, chama-se retrocompatibilidade.

O WHATWG tem mantido o foco para manter a retrocompatibilidade. Nenhum site deverá ter de ser refeito totalmente para se adequar aos novos conceitos e regras. O HTML5 está sendo criado para que seja compatível com os browsers recentes, possibilitando a utilização das novas características imediatamente.

Visão geral do HTML5 - W3C Brasil

html5shiv

Para o Internet Explorer existe um “calço” (shim em inglês) em javascript que permite ao navegador reconhecer as novas tags, de modo que o seu CSS seja executado corretamente.

<!--[if lt IE 9]>
<script src="js/html5shiv.js"></script>
<![endif]-->

Aqui é utilizado um código de comentário condicional, que o IE entende como uma condição para incluir o script. No caso do exemplo, se a versão do IE for inferior a 9. Acesse html5shiv no Google Code para baixar o arquivo e saber mais. Ou veja como criar um código parecido neste outro artigo.

Modernizr

Se você pretende fazer mais do que estilizar o site com CSS, pode precisar de uma biblioteca mais completa, chamada Modernizr. O Modernizr é uma biblioteca de detectação que lhe permite verificar o suporte da maioria das características do HTML5 e CSS3. Além de incluir automaticamente classes especiais na tag <html>, cria um objeto javascript Modernizr, que tem as propriedades correspondentes a cada funcionalidade para testar se o objeto desejado está disponível no navegador.

if (Modernizr.geolocation) {
// Aceita a feature
} else {
// Não aceita a feature testada.
}

Fontes de consulta

Para mais informações e recursos, acesse estes links: