Para expandir o argumento de Abhijit:
Suporte para código legado: Milhões de linhas de código estão em execução de maneira confiável por anos e as Business Houses não encontram motivos convincentes para reescrevê-lo em servidores que não são de mainframe.
Na minha experiência, esse é um problema bastante grande para o tipo de empresa que escolhe executar mainframes (que geralmente são investimentos bastante grandes). Um projeto em que me envolvi foi uma investigação para responder a uma pergunta: com quais tecnologias o cliente (um grande banco) optou por substituir os mainframes? A questão foi dividida em partes menores, com foco no SO, no DB e nos idiomas e estruturas de implementação.
Mesmo considerando a linguagem, encontramos um problema bastante grande: a reescrita da base de código existente foi estimada em cinco anos (sem aumentar muito as equipes de desenvolvimento, o que traria seus próprios problemas). Obviamente, esse é um grande problema em termos de oportunidades perdidas para gastar esse tempo desenvolvendo outro software, mas além disso, é difícil escolher uma tecnologia com esse tipo de cronograma em mente. Java ou .Net? Em um período de 5 anos, o que é considerado "bom código" em qualquer um deles é um material legado desatualizado, com as principais versões de cada um saindo a cada dois anos.
Recostando-se e pensando nisso, o tipo de estabilidade que os mainframes oferecem se estende também ao ambiente real, as coisas tendem a mudar lentamente; o que é bom se você tiver cem milhões de linhas de código para manter.