Si el problema es común como, por ejemplo, escribir un compilador o un navegador, los requisitos se dan en forma de estándares de idioma, sistemas operativos de destino y hardware de destino, etc.
Para cosas como GNU Emacs, que son muchas cosas para muchos además de cumplir excelentemente su objetivo original de ser un editor de texto, creo que los requisitos tenían sentido debido al inmenso alcance para extenderlo. Los chats, correos electrónicos, grupos de noticias, edición de código, control de versiones vienen a la mente. Hay un científico investigador trabajando en Emacspeak. Creo que se pueden decir cosas similares de los navegadores y otras cosas que permiten extensiones.
Si el software está alcanzando una función que está disponible solo en software que no es de código abierto, el requisito se da más o menos nuevamente.
EDITAR:
Cuando el software de código abierto pasa a mantenimiento y quedan menos requisitos originales que no se cumplen, la mayoría de los requisitos pueden provenir de errores, la necesidad de adaptarse a nuevas plataformas como CPU de múltiples núcleos y otro hardware que ofrecen un mejor rendimiento cuando se explotan, y demás.
En un proyecto totalmente basado en la investigación como el Hurd de GNU, creo que los requisitos provienen de los resultados de la investigación y los documentos.
Para resumir,
al comenzar, los requisitos para el software que intenta resolver problemas comunes pueden provenir de documentos estándar
para el software que se está poniendo al día con otro software existente, es probable que los requisitos sean producir todo o la mayoría del conjunto de características del software existente y algunas otras características que los desarrolladores / usuarios consideran interesantes tener
para proyectos de investigación, documentos y otras publicaciones podrían establecer los requisitos
cuando en mantenimiento, los errores, la necesidad de adaptarse a los entornos más nuevos puede ser una fuente importante de requisitos