Oi Felipe, excelente questão.
Aqui é importante distinguir o conceito de Interfaces do recurso da linguagem interface
que temos em Java/C# e outras.
Em OO, uma Interface é a forma como nos comunicamos com o objeto. Seus metodos publicos e suas assinaturas. No Ruby e duck typing em geral, nossa classe tem uma Interface de uso, que são os métodos dela. Várias classes têm a mesma interface apenas por ter os mesmos métodos. Não existe um contrato explícito, nenhuma sintaxe da linguagem, que obrigue classes diferentes a terem a mesma interface de uso.
O que as linguagens estaticas como Java/C# oferecem é o recurso de declarar essas interfaces de uso em uma sintaxe da linguagem através da palavra chave interface
. É uma forma da linguagem garantir explicitamente o contrato, a interface de uso da classe, direto pelo compilador.
Então resumindo: duck typing é usar interfaces, só que de forma dinamica. E as interface
das linguagens estaticas sao apenas uma forma do compilador verificar as interfaces pra vc de forma estatica.