On 08/04/2021 09:53, Marvin Häuser wrote:
On 07.04.21 23:50, Michael Brown wrote:
InstallMultipleProtocolInterfaces() is not a breaking change: the existence of InstallMultipleProtocolInterfaces() does not require any change to the way that InstallProtocolInterface() is implemented or consumed.

Code written before the invention of InstallMultipleProtocolInterfaces() will still work now, with no modifications required.

The same is true for the *2_PROTOCOL instances, I do not see how you distinct between them. Could you elaborate, please?

The distinction is very straightforward. If you plan to *remove* support for the older protocols, then you by definition place a burden on all externally maintained code to support both protocols. If the older protocol will continue to be supported then no such burden is created.

This is why I am asking you if your proposed changes require *breaking* backwards compatibility. You still haven't answered this key question.

You have to remember that UEFI is not a monolithic codebase with a single maintaining organisation.  Implementing a *2_PROTOCOL and deprecating the original just causes pain for all the code in the world that is maintained outside of the EDK2 repository, since that code now has to support *both* the old and new protocols.

I am aware, but actually it's not far from it nowadays. In contrast to the days of Aptio IV, I believe all big vendors maintain forks of EDK II. I know the fork nature taints the issue, but also see last quote comment.

This is empirically not true. Buy a selection of devices in the wild, and you'll find a huge amount of non-EDK2 code on them.

I would be extremely happy if every vendor just used the EDK2 code: it would make my life a lot easier. But it's not what happens in the real world.

I see that there is no EFI_USB_IO2_PROTOCOL instance to argue by. Yet there are EFI_BLOCK_IO2_PROTOCOL and EFI_LOAD_FILE2_PROTOCOL. Former, in my opinion, close in nature to your your example, and latter close to the nature on what I plan to propose. Sorry, but I do not see how what I suggest has not been done multiple times in the past already.

Please also look at it from an angle of trust. How can I trust the "secure" advertisements of UEFI / EDK II when the specification *dictates* the usage of intrinsically insecure APIs? The consequence for security-critical situations would be to necessarily abandon UEFI and come up with a new design. In who's interest is this?

Again, we return to the question that you have not yet answered: do your proposed changes require breaking backwards compatibility?

Please do answer this question: if you're *not* proposing to break the platform in a way that would prevent older binaries from working without modification, then we have no disagreement! :)

Don't get me wrong: I *am* in favour of improving the security of EDK2, and a formally verified loader is potentially useful for that. But I could only consider it a good idea if it can be done without making breaking API changes for which I know I will personally have to maintain workarounds for the next ten years.

Sorry, but you seem to have missed my points regarding these concerns, at least you did not address them I believe. I don't know why you need to (actively) maintain workarounds for APIs external code has no reason to use, especially when the legacy implementation would quite literally be a wrapper function.

<same comment as above>

Thanks,

Michael


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#73830): https://edk2.groups.io/g/devel/message/73830
Mute This Topic: https://groups.io/mt/81853302/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to