This document was disussed on March 28th during the App-Directory Working Group.
This document is intended to describe some general observations/concerns that Thomson Reuters has with regards to the standard being worked on.
We acknowledge that the FDC3 standard is work in progress and nothing has yet been signed off as the industry standard. For this reason, the goal of this document is to get the members' views on the points detailed below - and to agree what should or should not be included in the FDC3 standard.
Lastly, for full disclosure and transparency - we do have an interop API (Side by Side) and the below points are some challenges that we either faced during our initial implementation, or that are experiencing now and we are looking for solutions.
All of the below items are of major importance for us Thomson Reuters.
Below are some definitions that are only relevant in the context of this document. It doesn't imply the same terminology needs to be applied across the standard.
| Term | Definition |
|---|---|
product |
Software that has unique identity in the app directory, able to establish a handshake and authenticate as such. Responsible for launching other instances or applications. It can have product related intents. This is analogous to a launcher in Plexus land. Examples: Symphony, Excel, Eikon, FactSet, OpenFin |
application |
An application is instantiated by a product. It has specific intents and context that it can send/receive. The type could be explicitly stated (ie charting) or implied by its intents. |
component |
Components can be instantiated by a an application. These can be logical items within an app that have specific logic, and or can be individually targeted by another application. For example: a leg in a swap, a line in a chart, an application in a Layout (multi-app) container. The components can establish a parent-child relationship across these instances. |
bus |
Without too much technical detail, this is the channel that enables the communication across connected applications in the desktop. |
app directory |
Holds the unique identity and metadata of the universe of products, applications and components, along with its relevant intents and context each of them can accept. Allows for discoverability. |
app manifest |
This is the runtime manifest that holds the information of all the product and applications that are authenticated/connected to the bus. Perhaps a copy of its intents which has been fetched from the app directory. This app manifest could also hold the information about application instances (state), linked applications, as well as information regarding application subscriptions to a given channel. |
broker |
This is a product that is capable of instantiating a bus and responsible for providing authentication workflows, fetching information from an app directory as well as holding the app manifest. Not all FDC3 compliant applications should be expected to be brokers. |
consumer apps |
Products (applications) that know how to look for an already established bus, send authentication credentials (if needed), subscribe to events and send/receive intents and relevant context. These consumer apps are not responsible for establishing a bus or to hold an app manifest (although they should be able to query the broker for it). |
Other definitions
| Term | Definition |
|---|---|
FDC3 |
In the context of this document, FDC3 refers to the standard proposal in its current state (as of March 28th 2018). It does not mean or reflect what FDC3 can be in the future. |
Plexus |
Plexus is an interoperability project hosted by the FINOS foundation (ex-Symphony Foundation) and contributed by Deutsche Bank. Main differences vs FDC3 are that Plexus broker) and every other application becomes a consumer app. |
We acknowledge that the majority of the applications serve a defined and encapsulated purpose (ie charting app, chat app etc). However, there are other Desktop Software products that can host multiple applications with different purposes (ie Thomson Reuters Eikon, REDI, Finsemble, FactSet etc).
- It is not expected that every underlying application hosted by these products (can be thousands) require to go through a handshake/authentication workflow.
- These workflows should be managed by the
product. - The
productis responsible of instantiating theseapplications.Plexusrefers to these aslaunchers.
- These workflows should be managed by the
- It is however expected that the
intentsand relevantcontexteach of theseapplicationsaccept, to be declared in theapp directoryfor discoverability purposes.- The
applicationidentity could reflect this relationship through namespacing ie eikon.chart, redi.spreadtrader.
- The
Already defied above. There are multiple scenarios on regards to brokers.
- Single central interop broker (separate software). Every app becomes a
consumer app.- Pros:
- Massively simplifies the management of buses
- Better utilisation of physical resources (memory)
- There are no
brokercompatibility issues. - Simplifies configuration (
app directoryaddresses, IDPs etc)
- Cons:
- It may require to cover multiple authentication/entitlement scenarios to satisfy every
product'sneeds. - If the broker crashes, then all connections/subscriptions may get lost
- It may require to cover multiple authentication/entitlement scenarios to satisfy every
- Pros:
- Multiple concurrent
brokers. Consider the scenario whereOpenFin,EikonandFactSetare installed on the same Desktop.- All of the above can be
brokersin terms that they could've adopted theFDC3standard and instantiate abusand manage authentication as well as anapp manifest. - If only one of them is running, the interop workflows are easy to understand. The same cons and pros of the Single model apply.
- However, if there is more than one running, then should there be:
- A single active
brokerrunning (the first one) and the second one will act as aconsumer app?- Pros
- Possibility of a active/passive model: When the active
brokeris closed/crashes, one of the passivebrokersis elected Active.
- Possibility of a active/passive model: When the active
- Cons
App manifestinformation may get lost (unless passivebrokersare aware of it at all times)- Need to re-establish subscriptions
- Pros
- Multiple
brokerswhere eachbrokerinstantiates its ownbusand interoperate amongst them?Consumer appsmay connect to eitherbroker.- A bridge is established across
brokers - Every
brokersholds a copy of the entireapp manifest. - Pros:
- If any of the
brokerscloses down (or crashes), then theapp manifestis knows by the rest of otherbrokersand connections can be re-established. - There can be a fall-back mechanism for
consumer apps.
- If any of the
- Cons:
- Complicates the architecture of
brokers - Resource (memory) utilisation
- Version compatibility challenges
- Complicates the architecture of
- Both (or more)
brokerinstantiate abusbut they act independently?- Pros:
- Simplifies the architecture
- Cons:
- Creates complexity for the
consumerapps and challenges for the user in having to understand whichproductto connect to. - Resource (memory) utilisation
- Discoverability becomes a challenge
- Creates complexity for the
- Pros:
- A single active
- All of the above can be
- Peer to Peer Every
productis abroker.- There is a point to point connection across every participant
- Every app is aware of the app manifest at all times
- Pros:
- Every app can manage their own entitlements
- The
app manifestis known by all participants, therefore if any of theapplicationscloses or crashes, theapp manifestwould automatically reflect this. All other connections/subscriptions are kept alive.
- Cons:
- Creates massive complexity (overkill) for every
consumer applicationhaving to handle all of this. - All
applicationswould need to fetch information from theapp directory - Resource (memory) utilisation
- Creates massive complexity (overkill) for every
- Pros:
Consider the following workflow:
redi: tell eikon to launch a chart and set IBM as the context
eikon: ok. ChartID:abc123
redi: tell eikon to update the context of ID:abc123 to VOD
For the above scenario it is indispensible to keep an app manifest and know that there is an instance id:abc123 of type eikon.chart. Only this way we can keep interacting (interoperating) with these objects.
We cannot expect that we need to launch a new instance everytime a interaction is needed (fire and forget).
Consider the following scenario:
- ChartIQ registers its
intentsandcontextin theapp directory. - ChartIQ can be accessed as a standalone
application. Or it can be accessed through Symphony's Marketplace as well as from Eikon's App Studio.
Is it expected to re-register the whole set of intents and context for each scenario (3) in the app registry, ie to have chartiq, symphony.chartiq and eikon.chartiq with their full definition? Or is their a way that we can refer to a base definition and only the product (launcher) changes?
An app registry can live at the Desktop level, at premise or hosted in the cloud.
- Multiple
app registriesshould be accessible on a given session. E.g. a bank may have its ownapp registryin premise, and fall-back to a cloud based one. - Configuration files should be centralised and accessible by all brokers. These files should state the multiple
app registryaddresses, either local to the desktop, local to the customer or cloud based.
It is not expected that the FDC3 will act as an IDP or work with a single IDP. However it is important to acknowledge that security and authentication are critical to interoperate across brokers.
- How are going to manage multiple IDPs?
- What about encryption across
brokers? - Where to define trusted
broker?
This does not relates to app specific entitlements (ie content, features permissioning etc). It is more about:
- is
product aallowed to talk toproduct b? - is
app aallowed to talk toapp b? - can
app asubscribe to a given channel? - can
product arequest a copy of theapp manifestforinstancesthat already were loaded previous toproduct ajoining thebus? - Can the the user manage these entitlements?
- If so, where is this held?