In a nutshell, Eclipse CDT.cloud is an umbrella project for components to build web-based C/C++ tools. These components are integrated into a template tool called CDT.cloud Blueprint.
There is currently a big shift from desktop based tools to web- and cloud-based tools. With the Eclipse Cloud Development top level project and technologies such as Eclipse Theia, Eclipse Che, Eclipse GLSP, openVSX or EMF.cloud, Eclipse is rapidly building up an ecosystem for the creation of cloud-based tools. This ecosystem is augmented by the wider ecosystem of available VS Code extensions and language servers, e.g. clangd for C/C++.
Many of the current adopters of these technologies are embedded vendors or more general companies providing C/C++ tools. Several of these vendors are adopters of Eclipse CDT. As currently identified in the Special Interest Group for embedded development (embedded SIG), there are some missing building blocks for full-fledged C/C++ tooling in the web/cloud. The embedded SIG is identifying these gaps and working on common solutions as joined initiatives. The developed solutions are currently hosted in various places including Eclipse Theia, Eclipse CDT and Github, which makes it hard for adopters to find them.
To address this, the Eclipse CDT.cloud will be an umbrella project hosting the results of these initiatives. It will also be open for technologies in the same context which are contributed independently of the embedded SIG or have already been existing, though.
The Eclipse CDT.cloud project is about technologies for the development of web- and cloud-based C/C++ tools. It does not aim at providing components that are already available from other open source projects, but rather augment the open source ecosystem with components that are identified to be missing.
The initial scope of the project will include the following sub components, they are described in more detail in the following section:
Eclipse Trace Compass Cloud: A web-based version of the existing tracing tool “Trace Compass”
CDT GDB-DAP Adapter: An adapter to connect a debugger UI via the debug adapter protocol to GDB debug sessions.
Eclipse CDT.cloud Blueprint: A template tool distribution for C/C++ development bundling common building blocks such as a language server, a debugger, a trace view, etc.
However, the scope of the project will be extended by new components once they are required by the project’s stakeholders. These might be the results of current initiatives of the embedded SIG including: A memory inspection view, a context switcher for the clangd language server and support for multiple context debugging.
Eclipse Trace Compass Cloud
Eclipse Trace Compass Cloud provides tools and components that facilitate the adoption of cloud-based trace analysis and visualization use cases.
The scope of the project includes the following:
Trace Server Protocol (TSP) specification
A client-side library implementation of the TSP in Typescript
A client-side library implementation of the TSP in Python
Generic client front-end implementation in Typescript
Graphical libraries for specialized visualizations (e.g. Gantt-chart type view)
Even if the Trace Server Protocol can be used for other types of visualization use cases, for example for showing profiling data or memory usage, this is not in scope initially.
The primary purpose of this project is to provide a framework for visualizing traces on a distributed platform. A limitation of monolithic implementations like Trace Compass in its current form is that the front end and the back end need to be on the same machine, as well as the trace. This makes scalability limited to a single node. Another limitation is that Trace Compass’s front-end is coupled to SWT. This works well, in many cases, but when it comes to drawing complex images, it is still using the CPU for rendering assistance. A GPU accelerated solution such as something using WebGL technologies is desirable to maintain graphical scalability on modern 4k++ displays.
This can be used as a way to effectively perform deep dives in larger traces, both in duration and breadth while leveraging modern and common UI widgets. The front end shall be hosted in the project, as well as the protocol but the back-end shall remain in the Eclipse Trace Compass project.
The main functionalities of the viewer are configuration, showing trees, continuous data (plots) and discrete data (graphs). The viewers are to be navigable and time synced allowing nanosecond resolution queries.
This shall be used in a Visual Studio Code extension that will be a front end to Eclipse Trace Compass. The protocol defined shall be openly available too, so others may add custom back ends and front ends, much like the Language Server Protocol (LSP) and Debug adapter protocol (DAP), the Trace Server Protocol (TSP) aims to have reporting primitives sent over a network to other clients.
The goal of the trace server protocol is identical to that of the LSP and DAP. It would allow many back ends and many front ends to connect together seamlessly. It is key in remaining vendor neutral and truly open that it be hosted in a foundation such as eclipse.
Simpler example implementations shall also be made available in the server, such as a python command line viewer that could be used for CI/CD troubleshooting.
CDT GDB DAP Adapter
The Eclipse CDT GDB Adapter is an implementation of the Debug Adapter Protocol (DAP), allowing the connection of web-based tools to any device supporting GDB. The library can be included into VS Code, Theia or any client that supports DAP. For example, Renesas, ARM and Blackberry/QNX all have VS Code or Theia extensions that can allow the IDE to connect to their respective hardware and ecosystem. Whether your editor is a traditional IDE, or you are using the new generation of editors in the cloud, the adapter is a key piece that allows communication between that editor and GDB.
The Adapter is a library, and therefore enabling technologies, such as extensions, allow the library to be used in those editor/IDEs.This part of the project will therefore include such extensions and integrations as either examples or published products. Therefore, in addition to the third-party adapters that are built on top of CDT GDB Adapter, the adapter is also delivered as an extension for Theia via the Open VSX Registry and is expected to be delivered as an extension for VS Code in the near future.
Eclipse CDT.cloud Blueprint
CDT.cloud Blueprint is a template tool for building custom, web-based C/C++ tools. It is made of existing open source components and provides a typical C/C++ IDE based on the Eclipse Theia platform. This includes C/C++ language features, a language server (clangd), debugging support, memory debugging and a tracing view. It is meant to serve as a starting point for the implementation of domain-specific custom tools. For a simple showcase, CDT.cloud Blueprint can be easily downloaded and installed on all major operating system platforms.
CDT.cloud Blueprint is not a production-ready product. Therefore, it is also not meant to be a replacement for Eclipse CDT or any other IDE (yet).
As part of the CDT.cloud project, the Blueprint will serve as an integration tool that integrates other parts of CDT.cloud together with parts from outside the project. It therefore also ensures compatibility of the involved projects and can serve as a kind of simultaneous release.
The Eclipse Foundation provides a well-defined open source governance structure and has been a good place for many development tools such as Eclipse CDT. The Eclipse Cloud Development (ECD) working group facilitates the development of cloud development tools and provides a diverse and growing community. Being part of the ECD working will increase visibility and provide opportunities for collaborations and will help the ecosystem to grow, especially in the embedded domain.
Eclipse Trace Compass Cloud
Trace Server Protocol
Switch from Apache 2.0 to EPL-2.0
Switch from MIT to EPL-2.0
H1 2022: Initial contribution of all components
H2 2022: Simultaneous release via CDT.cloud Blueprint
Extend the project with existing and new emerging components, e.g. a memory inspection view, a context switcher for the clangd language server and support for multiple context debugging.