Java8 Lambdas y Excepciones

Me pregunto si alguien podría explicarme la siguiente rareza. Estoy usando la actualización 11 de Java 8.

Dado este método

private <F,T> T runFun(Function<Optional<F>, T> fun, Optional<F> opt) {
   return fun.apply(opt) ;
}

Si primero construyo una función Object, y la paso al método anterior, las cosas se compilan.

private void doesCompile() {
    Function<Optional<String>, String> fun = o -> o.orElseThrow(() -> new RuntimeException("nah"));
    runFun(fun, Optional.of("foo"));

}

Pero, si alineo la función como lambda, el compilador dice

excepción no declarada X; debe ser atrapado o declarado ser arrojado

private void doesNotCompile () {
    runFun(o -> o.orElseThrow(() -> new RuntimeException("nah")), Optional.of("foo"));
}

Actualizar: Resulta que el mensaje de error fue abreviado por maven. Si se compila directamente con javac, el error es:

error: unreported exception X; must be caught or declared to be thrown
            runFun(o -> o.orElseThrow(() -> new RuntimeException("nah")), Optional.of("foo"));
                                     ^
  where X,T are type-variables:
    X extends Throwable declared in method <X>orElseThrow(Supplier<? extends X>)
    T extends Object declared in class Optional

Ver tambiénaquí para código de prueba ejecutable.

Respuestas a la pregunta(4)

Su respuesta a la pregunta