Java8 Lambdas e exceções

Gostaria de saber se alguém poderia me explicar a seguinte estranheza. Estou usando o Java 8, atualização 11.

Dado este método

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

Se eu construir uma função Object pela primeira vez e passar isso para o método acima, as coisas serão compiladas.

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

}

Mas, se eu embutir a função como uma lambda, o compilador diz

exceção não declarada X; deve ser capturado ou declarado lançado

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

Atualizar: Acontece que a mensagem de erro foi abreviada por maven. Se compilado diretamente com o javac, o erro é:

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

Veja tambémaqui para código de teste executável.

questionAnswers(4)

yourAnswerToTheQuestion