A resposta direta é provavelmente que vi é parte do padrão POSIX (como @jasonwryan também mencionado em um comentário), assim como a especificação Single UNIX. Como tal, qualquer coisa que se chame como compatível com POSIX provavelmente inclui algo como vi , e qualquer coisa que queira se chamar UNIX tem , ou você não é certificado. Não apenas vi , mas o editor de linhas relacionado ex e a linguagem de script envolvida também fazem parte desses padrões. emacs não faz parte do padrão, por isso não está incluído.
Quanto a por que , existem vários motivos. Por um lado, emacs é muito, muito maior e mais complicado que vi . Há um LISP inteiro lá, entre outras coisas. A parte do POSIX que decide isso foi escrita em 1992, quando você precisaria de um computador muito pesado para emacs . Eu vi um vi executado no Minix em um 286 semi-decentemente. E, embora isso realmente não importe tanto para um desktop moderno, em sistemas embarcados ele ainda faz muito. Seu tamanho e versatilidade também dificultam a verificação de falhas de segurança, o que pode ser um problema em certas aplicações onde a segurança é imperativa. Basicamente, tudo o que poderia torná-lo um aplicativo de desktop melhor torna-o um componente pior do sistema.
Se você está pronto para uma aula de história, você também pode dizer que vi está mais próximo da filosofia Unix : faça uma coisa e faça bem . De fato, vi surgiu de ex e sempre foi um programa Unix. emacs surgiu de um mundo muito diferente: foi originalmente construído sobre o TECO, escrito para o sistema operacional ITS . Ele só foi portado para o Unix nos anos 80, já que o ITS estava desaparecendo. Isso torna emacs um imigrante de uma cultura muito diferente, enquanto vi é nativo.
Curiosamente, ambos emacs e vi foram lançados em 1976, então não é só que vi é mais antigo.