Rethinking Purpose
Purpose is designed as a generic abstraction framework. The app developer is expressing a task to be done and the framework offers alternative ways of fulfilling that task.
In practice the only type of task that we are using is exporting/sharing of files and URLs.
Due to being generic the API is lacking some type safety and convenience. For example the data is passed to the backends as JSON objects meaning the developer has to deal with undocumented string keys instead of a dedicated API. !44 (closed) introduces such dedicated API but that conflicts with the goal of being a generic task API.
!43 (merged) is another example of this abstraction being leaky. We changed a generic string ("Run") to a string that fits the only use case we have and is less generic ("Send").
In https://phabricator.kde.org/T12186 we are trying to come up with a cross-platform API for share dialogs where some systems have a native implementation and some would use the existing Purpose code. In Purpose we are mixing an interface for doing this with a (mostly Linux) implementation. Avoiding this is one of the KF6 design goals (https://phabricator.kde.org/T11556). Marrying the ideas of "provide an API for sharing things" and "Provide a generic task framework that happens to have implementations for some of them" turns out to be difficult without creating yet another framework and layer of abstraction.
Something I have considered in the past is using Purpose for the task of scanning a barcode, with implementations using a local camera, a remote camera using KDE Connect or a local file. However this never materialized and I'm not sure how much value using Purpose would bring over a dedicated API.
To summarize: I think that being a generic abstraction framework creates more problems than it solves, especially considering we currently only have one use case implemented.
My proposal would be to create a new framework tailored around sharing content with a cross-platform API and a separated (Linux/Plasma) implementation. Then the current purpose framework can be retired.