<div dir="ltr">So let me give a PM perspective, which is generally non-technical (but, given that this is a technical topic, it is semi-technical).<div><br></div><div>I see at least 4 extensibility points, in no particular order:</div><div><br></div><div><ol><li>The "client". We have good separation of concerns and, therefore, build our UX on top of a set of APIs. (And do not beat me up on API vs ABI vs SPI vs. whatever -- use whatever term makes you the most comfortable.) We have made an opinionated decision to focus on a 100% cloud-native UX. However, given the availability of the API, someone could create a totally different, purposeful client UX -- for example, maybe a tight, GUI integration of Work Item Tracking in Eclipse, to make it easy to see work to be done, associate commits against Tasks, etc.</li><li>The "Major Areas" of functionality. Per the wireframes, we are working towards an opinionated bi-level UX for the top-level functionality. Essentially, each major area of functionality lives on a tab in the UX, with some name (e.g. Work, Code, Test, etc.), and offers up a short list of choices which appear just below the tab. (e.g. Code/Codebases and Code/Workspaces). Under that list is essentially a large panel, in which that major area of functionality can do whatever it wants in terms of UX. This gives is unified UX navigation but otherwise lets the extension do what it wants (within whatever limitations are a result of the UX framework/Patternfly).<br>In my mental model, these major areas of functionality are plug-ins/extensions, resting on a common backplane. And the ones that appear really should be a <b>run-time, per-user decision</b>. This enables some interesting/important scenarios:</li><ol><li>As a user, I may be part of a beta test for a new top-level piece of functionality. So, when I log in, an extra tab "Foo" appears that most others do not see.</li><li>We establish a marketplace, and individual users and/or orgs elect to have new major areas of functionality enabled. These users see new major tab "Bar" when they log in.</li><ol><li>That is not an attempt to make a statement about WHERE that functionality executes (e.g. on our server), so do not assume I've implied anything about that.</li></ol><li>Almighty becomes an even broader platform for substantially more differentiated 'development' use cases via a UX drive by entitlement.</li><ol><li>For example, maybe a user has the 'citizen developer' entitlement, such that when then log into Almighty, they get a significantly simplified UX -- maybe with only just a single tab -- enabling them to solve the finds of problems of interest to them (e.g. integration solutions) -- all the while, behind the scenes, the full Almighty infrastructure and project model is being transparently used on their behalf. They can then have a 'real developer' join their project and, when that 'real developer' signs in, they see the full Almighty UX and can augment the integration solution with code, etc.</li></ol></ol><li>The "Minor Areas" of functionality. There should be a standard way for the Major Areas of functionality to express to the backplane their own extensibility points. E.g, the Work tab containing the Planner might say to the backplane 'hey, I've got a context menu exposed on work items" (e.g., when the user sees a work item, they can right-click and pop-up a menu for that work item). This would permit a 'minor extension' -- e.g., someone might write a plug-in which can graphically draw the full interconnected graph of a work item linked to other work items. And this extension would then say "hey, I'd like to add 'Visualize' as a menu choice to all of the work item context menus, no matter which major functionality area has one."</li><li>Hooked Services. You standard web hooking stuff, but in this case using Almighty as the event source. e.g., "any time a work item changes, call this remote URL with the details of the change."</li></ol><div>Okay, so where does the stuff run? Clearly, executing other people's stuff on our server is, in general, a Very Bad Idea. Still, there are two viable operating models: (1) the extension executes 'elsewhere' but has the ability to draw its UX within Almighty. (2) the extension is essentially 100% browser-based (HTML5/JS/CSS3), rendered directly in the browser and making use of APIs to get the data it needs. I've got a ton I could say on how these 2 modes could actually work -- too much for an email, tho. [FWIW, it's a proven model.]</div></div><div><br></div><div>Obviously, extensions we write and/or trust could execute on our servers. I think the proper mental model is that all extensions are running 'elsewhere', but the server operator can choose to have that 'elsewhere' be the same infrastructure.</div><div><br></div><div>Some pictures are probably going to help a lot...</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 2, 2016 at 9:22 AM, Max Rydahl Andersen <span dir="ltr"><<a href="mailto:manderse@redhat.com" target="_blank">manderse@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 2 Nov 2016, at 14:15, Michael Kleinhenz wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi all,<br>
<br>
preliminary notice: I can live with any of the solutions, I see<br>
advantages and problems with both.<br>
<br>
Maybe I have done too much sales on such stuff, but I think the<br>
"Consumer Model" will be a major roadblock in actually convincing<br>
people to support us. This model will require lots of effort, changes<br>
to their live system and/or deployment and operations(!) to support<br>
integrating with us. In my experience especially the last one,<br>
operations, is a real blocker for 3rd parties. Just my 0.02€ on real<br>
world adoption of products in the corporate world..<br>
</blockquote>
<br></span>
I'm really confused how something that requires no changes on their external systems<br>
is a problem for adoption ?<br>
<br>
I'm missing something in this argument ;)<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I think our way of approaching that question is way to technical and<br>
not enough sales. (I am feeling dirty that I have said that :-)<br>
<br>
But anyway, again: if we decide for the consumer style model, thats<br>
fine for me, I just want to say that there might be another, non-tech,<br>
view on that.<br>
</blockquote>
<br></span>
/max<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
<br>
-- Michael<br>
<br>
On Tue, Nov 1, 2016 at 6:30 PM, Andrew Lee Rubinger <<a href="mailto:alr@redhat.com" target="_blank">alr@redhat.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Gave some time to think this through. :)  Appreciate the thoughts Michael,<br>
because I think your email here has redirected our line of thinking into<br>
something better than originally designed.<br>
<br>
To me, the most important issues this thread has vetted are:<br>
<br>
1) Encouraging extension of Almighty through new providers<br>
2) Security<br>
<br>
Now, I had been initially conceiving something akin to what Michael is<br>
calling the "Deployment" model; an interface that providers implement.  On<br>
further reflection I've come to find the REST-based approach outlined as the<br>
"Consumer" model accomplishes all of our goals and better handles the two<br>
points above.<br>
<br>
For 1), we let users register their own service, running *somewhere*, to be<br>
written in whatever language and execution environment they decide.  This<br>
imposes on providers writers the burden of deploying their thing instead of<br>
deploying it into Almighty, but, as 2) shows, this is a good thing.<br>
<br>
The security constraints of 2) really say that we will absolutely not run<br>
untrusted code in our online service offering.  Initially I'd thought that<br>
anyone who wants to write their own providers could be on their own to host<br>
an Almighty instance as well, but by making the provider model a firewall<br>
where untrusted code runs externally to Almighty, we could be opening<br>
ourselves off to safe extensibility or community-driven extensions in the<br>
future.  While this is not a requirement for our first launch, it's<br>
definitely the kind of thing Todd envisions for us going forward.<br>
<br>
TL;DR for me now: a REST-based extension SPI model, and registration<br>
mechanism with Almighty core which sets that up.  Will look forward to<br>
seeing those designs.<br>
<br>
S,<br>
ALR<br>
<br>
On Mon, Oct 31, 2016 at 10:57 AM, Tomas Nozicka <<a href="mailto:tnozicka@redhat.com" target="_blank">tnozicka@redhat.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Hi Pete,<br>
<br>
(see inline)<br>
<br>
On Thu, 2016-10-27 at 13:15 -0400, Pete Muir wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
This reminded me of the VS Code/LSP architecture. In this<br>
architecture there are a number of proceses running:<br>
<br>
1) The VS Code tool<br>
2) A server which can control and talk to any LSP implementation via<br>
a socket or REST or other transport protocol<br>
3) The LSP implementation(s) written in the language of choice,<br>
talking a JSON protocol<br>
</blockquote>
I like the separation and implementation language independence.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
This is closest to the the Consumer model that Michael describes, but<br>
I think we could also look at also being able to run the plugin (and<br>
the thing it connects to) on our servers, but using transports other<br>
than HTTP (e.g. sockets).<br>
</blockquote>
I am not opposing the idea, but would you mind laying out some story<br>
why it would be useful?<br>
<br>
>From my point of view vendors can run such service on OpenShift Online<br>
or any other server (or cloud).<br>
<br>
Even we were (are) planing to run OSBP on different server using<br>
HTTPS.<br>
<br>
I don't see the use case for supporting sockets (or similar mechanisms)<br>
especially when Almighty will be running in the cloud; if such<br>
mechanism could even work there.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
I don't think allowing people to write scripts that execute inside<br>
our processes is a good idea.<br>
</blockquote>
+1<br>
<br>
<br>
Regards,<br>
Tomas<br>
</blockquote>
<br>
<br>
<br>
<br>
--<br>
Red Hat Developer Group Architecture<br>
@ALRubinger<br>
</blockquote>
<br>
-- <br>
Michael Kleinhenz<br>
Principal Software Engineer<br>
<br>
Red Hat Deutschland GmbH<br>
Werner-von-Siemens-Ring 14<br>
85630 Grasbrunn<br>
Germany<br>
<br>
RED HAT | TRIED. TESTED. TRUSTED.<br>
Red Hat GmbH, <a href="http://www.de.redhat.com" rel="noreferrer" target="_blank">www.de.redhat.com</a>,<br>
Registered seat: Grasbrunn, Commercial register: Amtsgericht München,<br>
HRB 153243,<br>
Managing Directors: Paul Argiry, Charles Cachera, Michael Cunningham,<br>
Michael O'Neill<br>
<br></div></div><span class="">
______________________________<wbr>_________________<br>
almighty-public mailing list<br>
<a href="mailto:almighty-public@redhat.com" target="_blank">almighty-public@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/almighty-public" rel="noreferrer" target="_blank">https://www.redhat.com/mailman<wbr>/listinfo/almighty-public</a><br>
</span></blockquote>
<br>
<br>
/max<br>
<a href="http://about.me/maxandersen" rel="noreferrer" target="_blank">http://about.me/maxandersen</a><div class="HOEnZb"><div class="h5"><br>
<br>
______________________________<wbr>_________________<br>
almighty-public mailing list<br>
<a href="mailto:almighty-public@redhat.com" target="_blank">almighty-public@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/almighty-public" rel="noreferrer" target="_blank">https://www.redhat.com/mailman<wbr>/listinfo/almighty-public</a><br>
</div></div></blockquote></div><br></div>