Para ampliar el punto de Abhijit:
Compatibilidad con código heredado: millones de líneas de código funcionan de manera confiable durante años y las casas de negocios no encuentran una razón convincente para reescribirlo en servidores que no sean mainframe.
En mi experiencia, este es un problema bastante grande para el tipo de corporaciones que optan por ejecutar mainframes (que generalmente son inversiones bastante grandes). Un proyecto en el que estuve involucrado fue una investigación para responder una pregunta: ¿con qué tecnologías debería elegir el cliente (un banco grande) reemplazar los mainframes? La pregunta en realidad se dividió en partes más pequeñas, centrándose en el sistema operativo, la base de datos y los lenguajes y marcos de implementación.
Incluso teniendo en cuenta el lenguaje, nos encontramos con un problema bastante importante: se estimó que la reescritura de la base de código existente tomaría alrededor de 5 años (sin aumentar en gran medida los equipos de desarrollo, lo que traería sus propios problemas). Obviamente, este es un problema importante en términos de la oportunidad perdida de pasar ese tiempo desarrollando otro software, pero más allá de eso, es difícil elegir una tecnología con ese tipo de líneas de tiempo en mente. Java o .Net? En un período de 5 años, lo que se considera "buen código" en cualquiera de ellos es material heredado muy desactualizado, con versiones principales de cada uno saliendo cada dos años.
Sentándose y pensando en esto, el tipo de estabilidad que proporcionan los mainframes se extiende también al entorno real, las cosas tienden a cambiar lentamente; lo cual es bueno si tiene cien millones de líneas de código para mantener.