ha alguns opensource. se quisesse aprender, comecaria por estudar o codigo deles.
alias, so de baixar o codigo e verificar o tamanho e complexidade, daria uma boa ideia do quao dificil é.
nao deve ser muito dificil se tem familiariade com a linguagem e networking, e estudar bem os docs do protocolo.
e se for opensource, vc pode 'auditar' e vir aqui informar se viu algum problema (avisa os devs antes em privado, ne?)
mas fazer bem feito precisa de alguma experiencia. e, uma vez comecado, sao muitas funcionalidades possiveis, vai somando, e user reclamando 'falta isso', competicao com outros clientes... no final eh um trabalho de tamanho razoavel