Read Sotomayor’s and Kagan’s questions at 20-22, 52-58: https://www.supremecourt.gov/oral_arguments/argument_transcr...
I think the Justices were struggling a bit for analogies, but got the basic gist of the difference between implementing code and declarations.
The difficulty is that they have to think about this in terms of the relevant legal concept (merger) not the relevant technical concept (interoperability). You can copyright expressions of ideas, but not ideas themselves. Merger doctrine says you can’t copyright an expression of an idea if there is only one way to express the idea, because then the idea “merged” into the expression.
Do declarations merge into the idea of the implantation? In some sense clearly they don’t. If you have a set of functions that operate on an object, the convention in C is to put the object first and the parameters after. You “append, into this vector, this value.” In Common Lisp, it’s often reversed. You “append this value to this vector.” Both express the same idea—a command for appending a value to a vector—but there is a creative choice in the expression.
But you can think of the same idea at a lower level. “Calling a function named push to append an element to a vector where the first parameter is the vector and the second parameter is the element.” In that case, there is really one way to express that idea. Why would you think of the “idea” at such a low level? Because that’s what you’re doing when you’re interfacing with an actual API. The “idea” isn’t some abstract hypothetical function for appending, it’s the actual “push” function with parameters in the specific order.
The problem is that interoperability is not really something that goes to copyright-ability, but fair use, which comes after copyrightability. Dictating how you see the “idea” based on interoperability seems a bit like a phase ordering violation.
Oyez hasn't posted it yet, but it'd be up here later: https://www.oyez.org/cases/2020/18-956