planeteclipse.org
Open in
urlscan Pro
198.41.30.200
Public Scan
Submitted URL: http://planeteclipse.org/?1.5.3-spam
Effective URL: https://planeteclipse.org/planet/?1.5.3-spam
Submission: On January 26 via api from DE — Scanned from CA
Effective URL: https://planeteclipse.org/planet/?1.5.3-spam
Submission: On January 26 via api from DE — Scanned from CA
Form analysis
1 forms found in the DOMPOST https://eclipsecon.us6.list-manage.com/subscribe/post
<form action="https://eclipsecon.us6.list-manage.com/subscribe/post" method="post" target="_blank">
<div class="form-group">
<input type="hidden" name="u" value="eaf9e1f06f194eadc66788a85">
<input type="hidden" name="id" value="46e57eacf1">
</div>
<input type="submit" value="Subscribe" name="subscribe" class="button btn btn-warning">
</form>
Text Content
Cookie settings Some Eclipse Foundation pages use cookies to better serve you when you return to the site. You can set your browser to notify you before you receive a cookie or turn off cookies. If you do so, however, some areas of some sites may not function properly. To read Eclipse Foundation Privacy Policy click here. DeclineAllow cookies Skip to main content * Manage Cookies Donate * About * Add your blog * Community * Marketplace * Events * Planet Eclipse * Newsletter * Videos * Blogs * Participate * Report a Bug * Forums * Mailing Lists * Wiki * IRC * Research * Eclipse IDE * Download * Documentation * Getting Started / Support * How to Contribute * IDE and Tools * Newcomer Forum * More * * Community * Marketplace * Events * Planet Eclipse * Newsletter * Videos * Blogs * Participate * Report a Bug * Forums * Mailing Lists * Wiki * IRC * Research * Eclipse IDE * Download * Documentation * Getting Started / Support * How to Contribute * IDE and Tools * Newcomer Forum Toggle navigation 1. Home 2. Community 3. Planet Eclipse * Latest Posts * Blogs JANUARY 22, 2024 John Kellerman UNVEILING THE POWER OF OPEN VSX: AN OPEN HUB FOR TOP VS CODE EXTENSIONS by John Kellerman at January 22, 2024 07:12 PM Unveiling the Power of Open VSX: An Open Hub for Top VS Code Extensions Open VSX is an open-source registry for VS Code extensions, providing a decentralized and community-driven alternative to the Visual Studio Code Marketplace. Created to foster collaboration and innovation, Open VSX offers developers a space to share, discover, and contribute to a growing repository of extensions. Open VSX offers a curated selection of extensions that caters to various programming languages and development workflows. It's not about quantity; it's about quality and relevance to the community's needs. Image Open VSX boasts a collection that includes all of the most popular (top 100) VS Code extensions available on the Visual Studio Code Marketplace under open source licenses. These extensions cover a wide range of functionalities, from code formatting and linting to language support, debugging, and version control. For example, you can find extensions for editing and debugging Python and Jupyter notebooks, editing and debugging Java, and Gitlens, a powerful tool for improved collaboration and productivity with Git. What sets Open VSX apart is its commitment to openness and inclusivity. Anyone can contribute to the platform and its extensions can be used in any compatible IDE, making it a true reflection of the diverse needs and preferences of the developer community. Open VSX stands as a testament to the collaborative spirit of the developer community. It's not just a registry; it's a thriving ecosystem where developers come together to elevate their coding experience. If you'd like to become part of the Open VSX community, consider publishing an extension; contributing to one of the projects that comprise the deployment, eclipse/openvsx, EclipseFdn/open-vsx.org, and open-vsx/publish-extensions; subscribe to our mailing list; or join us as part of the Open VSX Working Group. John Kellerman Mon, 2024-01-22 14:12 -------------------------------------------------------------------------------- by John Kellerman at January 22, 2024 07:12 PM Eclipse Announcements ECLIPSE CLOUD DEVTOOLS CONTRIBUTOR AWARD 2023 GOES TO ECLIPSESOURCE AND TYPEFOX by Shanda Giacomoni at January 22, 2024 06:24 PM Eclipse Cloud DevTools Contributor Award 2023 goes to EclipseSource and TypeFox Shanda Giacomoni Mon, 2024-01-22 13:24 The Eclipse Cloud DevTools Contributor Award for the year 2023 is being jointly awarded to two remarkable companies, EclipseSource and TypeFox, in acknowledgment of their enormous, continuous, strategic, and sustainable contributions to the Eclipse Cloud DevTools ecosystem. URL https://blogs.eclipse.org/post/john-kellerman/eclipse-cloud-devtools-contributo… -------------------------------------------------------------------------------- by Shanda Giacomoni at January 22, 2024 06:24 PM John Kellerman ECLIPSE CLOUD DEVTOOLS CONTRIBUTOR AWARD 2023 GOES TO ECLIPSESOURCE AND TYPEFOX by John Kellerman at January 22, 2024 02:45 PM Eclipse Cloud DevTools Contributor Award 2023 goes to EclipseSource and TypeFox The Eclipse Cloud DevTools Contributor Award for the year 2023 is being jointly awarded to two remarkable companies, EclipseSource and TypeFox, in acknowledgment of their enormous, continuous, strategic, and sustainable contributions to the Eclipse Cloud DevTools ecosystem. Throughout 2023, EclipseSource and TypeFox have demonstrated exceptional commitment and expertise in various projects within the ecosystem, including Eclipse Theia, CDT Cloud, Eclipse GLSP, Eclipse Sprotty, EMF Cloud, and Eclipse Langium. Their leadership role is evident as they provide project leads and several committers to these open source projects. Their excellence was already recognized in monthly awards in January, July, October, and December, showcasing their consistent and impactful contributions. Their involvement in the Eclipse Cloud DevTools ecosystem is not just technical; both companies have been pivotal in strategic initiatives, which significantly supported the growth of the community and nurtured the adoption of its open-source technologies sustainably. As active participants and leading architects in the Eclipse Cloud DevTools working group, they have shown foresight in shaping the future of cloud development tools. TypeFox and EclipseSource play a unique and vital role in the ecosystem. As service providers specializing in building tools and IDEs, they provide an essential resource for companies aiming to develop their own tool offerings. Their investment in the maintenance and evolution of projects in the ecosystem is therefore not only a testament to their dedication but also strategically vital for their operations. In addition to their extensive contributions, EclipseSource and TypeFox provide a unique model of sponsored open source development. By contracting a service provider for sponsored development, adopters can directly engage experts who contribute to open source projects on their behalf, enabling a highly tailored and impactful approach to advancing open source initiatives that are of strategic importance for the adopter. This allows other companies to leverage the expertise of EclipseSource and TypeFox for specific fixes, feature developments, and general project maintenance, enabling a broader group of organizations to contribute to and strengthen the open-source ecosystem. The approach also allows for resource pooling, where multiple companies can collectively sponsor a full-time expert committer, thereby enhancing the efficiency and impact of contributions. The model of sponsored development has proven to be highly successful in the Eclipse Cloud DevTools Ecosystem, leading to increased and more sustainable contributions, thereby significantly enriching the ecosystem. Project websites contain information about which companies provide support and sponsored development. Service providers like EclipseSource and TypeFox are cornerstone elements of a thriving open-source ecosystem. They offer important support for custom projects and play a crucial role in fostering sponsored development for open-source components. We congratulate and thank both EclipseSource and TypeFox for being the recipients of the Eclipse Cloud DevTools Contributor Award for the year 2023. Your consistent dedication and impactful contributions have significantly advanced the Eclipse Cloud DevTools landscape, and we are profoundly grateful for your commitment and excellence. This Eclipse Cloud DevTools contributor award is sponsored by the Eclipse Cloud DevTools Working Group. The working group provides a vendor-neutral ecosystem of open source projects focused on defining, implementing and promoting best-in-class web and cloud-based development tools. It is hosted at the Eclipse Foundation, current members of the group include AMD, Arm, EclipseSource, Ericsson, Obeo, RedHat, Renesas, STMicroelectronics and TypeFox. John Kellerman Mon, 2024-01-22 09:45 -------------------------------------------------------------------------------- by John Kellerman at January 22, 2024 02:45 PM Jonas, Maximilian and Philip HOSTING IDES AND TOOLS ONLINE - LESSONS LEARNED by Jonas, Maximilian & Philip at January 22, 2024 12:00 AM The transition to cloud-based tools and IDEs is reshaping the landscape of software development. However, the details of hosting tools and IDEs online present unique challenges. If you’re... The post Hosting IDEs and tools online - lessons learned appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at January 22, 2024 12:00 AM JANUARY 18, 2024 Jonas, Maximilian and Philip CDT CLOUD BLUEPRINT: TRACING WITH TRACECOMPASS CLOUD by Jonas, Maximilian & Philip at January 18, 2024 12:00 AM In the world of C/C++ development, especially when doing performance tuning, tracing plays a pivotal role. CDT Cloud Blueprint, the web-based C/C++ development environment, provides advanced Tracing... The post CDT Cloud Blueprint: Tracing with TraceCompass Cloud appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at January 18, 2024 12:00 AM JANUARY 17, 2024 John Kellerman ECLIPSE CLOUD DEVTOOLS DIGEST - NOVEMBER AND DECEMBER 2023 by John Kellerman at January 17, 2024 07:57 PM Eclipse Cloud DevTools Digest - November and December 2023 THEIA ANNOUNCES FULL COMPATIBILITY WITH VS CODE EXTENSION API In his blog, Mike Milinkovich announced a significant achievement in the development of Theia: to wit, full compatibility with the Visual Studio Code (VS Code) extension API. This is a major milestone in the evolution of Theia toward a universally adaptable development environment. CONTRIBUTOR AWARDS TO TOBIAS ORTMAYR AND DOMINIK BORK The Cloud Dev Tools Working Group presented Contributor of the Month awards to Tobias Ortmayr for his continued work improving the performance of Theia and to Dominik Bork bringing academia, industry and open source closer together. ON BUILDING CLOUD NATIVE MODELING TOOLS Jonas, Maximilian & Philip, in this article, wrote about a talk they gave at EclipseCon 2023 on building cloud native modeling tools using modern web-based open source technologies like EMF Cloud, Langium and GLSP. ON BUILDING DIAGRAMS WITH GLSP In another article, Jonas, Maximilian & Philip also write about another talk they gave at EclipseCon 2023 about building diagramming tools using GLSP that are more testable, collaborative, and accessible (through improved keyboard navigation and metadata annotations). THEIA RELEASES 1.44 AND 1.45 Theia released 1.44 and 1.45 adding support for a "portable mode" keeping user data with the Theia application, language icons, improvements for secondary windows, search history, and saving untitled files. THEIA COMMUNITY RELEASE 2023-11 Theia also released their Community Release 2023-11 based on Theia 1.43. Community releases are provided once a quarter with a dedicated release branch that allows contributors to further harden and even hotfix a community release. To learn more about the advantages of the Theia community release, visit the Theia release page. OTHER RECENT RELEASES * JKube 1.15.0 * Langium 2.1.3 CLOUD TOOL TIME WEBINARS We are now scheduling Cloud Tool Time webinars for 2023. Be sure to Sign up now to get on the calendar and let us help tell your story. You can see past sessions on our Youtube channel. ECLIPSE CLOUD DEVTOOLS PROJECTS Explore the Eclipse Cloud DevTools ecosystem! Check out our projects page to find out more about open source innovation for cloud IDEs, extension marketplaces, frameworks and more. GETTING LISTED ON THE CLOUD DEVTOOLS BLOG If you are working with, or on, anything in the Cloud DevTools space, learn how to get your writings posted in our blog section. John Kellerman Wed, 2024-01-17 14:57 -------------------------------------------------------------------------------- by John Kellerman at January 17, 2024 07:57 PM Donald Raab WHAT IF JAVA HAD NO FOR? by Donald Raab at January 17, 2024 03:10 AM These loops look like objects to me! Photo by Etienne Girardet on Unsplash WHERE FOR ART THOU? This blog is intended to make you think about and discover alternatives to modeling for loops in an object-oriented (OO) programming language. It is convenient to have a versatile and performant eager for statement built in the Java language. It is also convenient to have lazy versions of numeric range based for loops in the form of IntStream and LongStream. In my previous blog, I introduced a new lazy abstraction for an int range based for loop, without giving much of an explanation. This is the quote in the previous blog where I introduced the concept. > In the active Boolean version of the the code, I use an IntInterval from > Eclipse Collections to represent an OO version of the for loop. I will explain what an IntInterval from Eclipse Collections is later in the blog. The following are the topics I will cover in this blog. * For Loops in Java * OO For Loops in Smalltalk * OO For Loops in Java * OO For Loops in Eclipse Collections In this blog, I explain some of the versatility of for statements in Java with examples. I explain how some of the language (lambdas) and library (Streams) work including in Java 8 release have improved the level of abstraction of looping constructs for Java developers. Java does not go as far as Smalltalk does on the OO abstraction level for looping constructs. I show and explain how Smalltalk makes some things amazingly simple in its pure object-oriented approach to looping. Finally, I explain some features that Eclipse Collections provides that enables additional levels of abstraction for Java developers to enhance their productivity. This blog does not include anything about parallelism. 1. FOR LOOPS IN JAVA THREE PARTS OF THE FOR Looping is part of control flow in a programming language. For loops are used to do things until a condition is met, or infinitely if no condition is specified. There is a for statement in Java that is well structured and extremely useful for executing a block of code a number of times. The example I used in the previous blog was to output a String parameter a specified number of times. public static void main(String[] args) { int numberOfTimes = Integer.parseInt(args[0]); for (int i = 0; i < numberOfTimes; i++) { System.out.println(args[1]); } } The code will throw an exception if less than two arguments are passed in. This code will output the String at args[1] the number of times specifed at args[0]. The String at args[0] is converted to an int and stored in the variable numberOfTimes. The structure of a for loop in Java includes three statements inside of parentheses after the for keyword, each separated by a semi-colon. The statements are as follows. * Initialization— executed once to initialize one or more variables * Continue Condition — a boolean expression that when true will continue to loop and when false will cause the loop to exit * Advancement Expression— an expression that may cause a change in the result of the Continue Condition, like incrementing or decrementing a counter or calling next on an Iterator. FOR EXAMPLE — SUMMING NUMBERS 1 TO 10 A very simple example of a for loop in Java is summing the numbers from 1 to 10. The following test is an example of this. @Test public void sumNumbersFromOneToTen() { int sum = 0; for ( int i = 1; // Intialization i <= 10; // Continue Condition i++) // Advancement Expression { sum += i; } Assertions.assertEquals(55, sum); } FOR EXAMPLE — SUMMING NUMBERS 10 TO 1 This code could also be written as summing the numbers from 10 to 1. The following test is an example of this. @Test public void sumNumbersFromTenToOne() { int sum = 0; for ( int i = 10; // Intialization i > 0; // Continue Condition i--) // Advancement Expression { sum += i; } Assertions.assertEquals(55, sum); } INLINING THE THREE STATEMENTS I previously broke the three expressions over multiple lines so they are easy to parse and read. Normally, the expressions will all be on the same line, as follows: // For loop from 1 to 10 incrementing by 1 for (int i = 1; i <= 10; i++) // For loop from 10 to 1 decrementing by 1 for (int i = 10; i > 0; i--) The for loop in Java is very versatile. Before the Java language had lambdas, the for loop was the preferred mechanism for iterating over an array or Collection. SUM ARRAY OF INTS —INDEXED ACCESS The following for loop uses indices for summing up elements of an int array. @Test public void sumArrayOfIntsUsingIndexedAccess() { int sum = 0; int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for ( int i = 0; // Intialization i < array.length; // Continue Condition i++) // Advancement Expression { sum += array[i]; } Assertions.assertEquals(55, sum); } SUM ARRAY OF INTS — JAVA 5 FOR LOOP The following for loop uses the simplified version of the for loop introduced in Java 5 for iterating over each element of a an int array. @Test public void sumArrayOfIntsUsingForEachLoop() { int sum = 0; int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (int each : array) { sum += each; } Assertions.assertEquals(55, sum); } The first part of the for loop includes the type and name of a varaible for each element in the array. In this case, I use int each.The second part, separated by a :, is the array to loop over. SUM LIST OF INTEGERS — INDEXED ACCESS If we have a List of Integer objects, we have a few ways we can write a for loop to calculate the sum. We can loop using indexed access. @Test public void sumListOfIntegersUsingIndexedAccess() { int sum = 0; List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); for ( int i = 0; // Intialization i < list.size(); // Continue Condition i++) // Advancement Expression { sum += list.get(i).intValue(); } Assertions.assertEquals(55, sum); } SUM LIST OF INTEGERS — ITERATOR We can loop using an explicit iterator. @Test public void sumListOfIntegersUsingIterator() { int sum = 0; List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); for ( Iterator<Integer> it = list.iterator(); // Intialization it.hasNext(); // Continue Condition // No Advancement Expression ) { sum += it.next().intValue(); // Advancement in statement via next() } Assertions.assertEquals(55, sum); } SUM LIST OF INTEGERS — JAVA 5 FOR LOOP We can loop using the enhanced for loop available since Java 5, which is really a shorthand for using the iterator approach above. @Test public void sumListOfIntegersUsingJava5ForLoop() { int sum = 0; List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); for (Integer each : list) { sum += each.intValue(); } Assertions.assertEquals(55, sum); } ALL FOR ONE, AND FOR FOR ALL The versatile nature of a for loop makes it a tough competitor for looping. Oleg Pliss commented on my post of this article in LinkedIn: > A few important features of ‘for’ loops are missing in the article: access to > the locals outside the loop; ‘continue’ and ‘break’ statements (potentially > with a label); and ‘return’ (from the method). This is some of what I was alluding to by the versatility of the for statement, and Oleg did a masterful job of identifying the functionality I did not cover in a single sentence. Here are links to further tutorials on for and the branching statements I didn’t cover here for those interested in learning more. In the rest of the blog I will demonstrate how for loops are implemented in Smalltalk, and show how in Java 8 and with Eclipse Collections, Java has advanced towards a more object-oriented and functional model of for loops. I have been working on replacing unnecessary for loops in Java applications for the past 20 years as I explain in the following blog. Usually there is a higher level algorithm like filter, map, or reduce that is implemented imperatively with a for loop. It’s more readable if you can hide the implementation details of a for loop behind a higher level abstraction that explains what you are doing with an intention revealing name. It’s also potentially better for performance for different types to optimize for specific iteration patterns, instead of requiring developers to write different for loops for different types because one is faster with indexed access vs. being faster with an iterator. My ten year quest for concise lambda expressions in Java 2. OO FOR LOOPS IN SMALLTALK The following is a quote from my last blog about Smalltalk and control flow. > Smalltalk is a programming language that models control flow in its class > library, instead of the language. There are no if statements, for loops, while > statements in Smalltalk. There are instead methods on classes that make > control flow possible. Methods are the abstraction that are used to model all > control flow, along with code blocks, which are also known as lambdas or > closures. An object-oriented version of a for loop will result in looping behavior distributed across many classes. The behavior of different kinds of for loops are aligned with the object that makes the most sense to be responsible for that behavior. There are both eager and lazy forms of a for loop in an object-oriented model. The statement version of a for loop in Java is always eager. SMALLTALK INTERVAL — SUM I will start by showing how to sum the numbers from 1 to 10 using Smalltalk’s Interval type. Interval is a lazy for loop. Interval is also a lazy SequqencedCollection. testSumNumbersFromOneToTen |sum| sum := (1 to: 10) sum. self assert: sum equals: 55. In my two previous “What if…” blogs, I explained that “everything is an object” in Smalltalk. I will explain one step at a time what all the objects are in the code above, and which are receiving the messages that are accomplishing the task at hand. The first object instance encountered in the code is the literal 1. The object instance represented by the literal 1 is of type SmallInteger. The message to: is sent to the object 1 with the parameter 10, which is also an instance of SmallInteger. If I inspect the result of the code (1 to: 10) in Pharo Smalltalk, the result is an instance of an Interval. The following is a screen capture of the result. The Code (1 to: 10) returns an Interval in Smalltalk Interval is lazy because it knows about the range of data (1 to 10 by 1) but has yet to do anything with that data. The Interval class in Smalltalk is designed as follows. Interval in the Smalltalk Class Hierarchy The decision to make Interval a SequencedCollection brings a lot of convenience. The internal iterator support for Interval is extensive. There are class methods on Interval which allow for construction. The convenient shorthand I used about calling to: on SmallInteger can be searched in the Smalltalk class library quickly to show how the Interval is constructed. The to: method defined on the Number class which is a parent class for SmallInteger The ^ means return in Smalltalk, so the code 1 to: 10 is going to result in Interval from: 1 to: 10 by: 1. An Interval in Smalltalk is inclusive for both the start and stop. The final step to understanding how the loop itself is implemented in the sum of the integers from 1 to 10 example is to look at the sum method. The implementation of sum on Interval What we discover here is that sum is optimized for Interval. It uses a formula instead of iteration with a loop. This is one of the benefits of having loops represented by objects. They can provide encapsulate and optimized behaviors. SMALLTALK INTERVAL — DO: In the interest of demonstrating the actual loop, I will implement an iterative sum by hand in a test. testSumNumbersFromOneToTenWithDo |sum| sum := 0. (1 to: 10) do: [ :each | sum := sum + each ]. self assert: sum equals: 55. I use the do: method here with a Block (lambda) which updates the sum variable with the value of sum plus the value of each SmallInteger. The implementation of do: on Interval looks as follows. The implementation of do: on Interval class in Pharo Smalltalk The implementation of do: uses a Block (Condition Continue Block) with whileTrue: followed by Block (Execution Block) to perform the looping. The Condition Continue Block and Execution Block both require access to the index variable which is scoped outside of the blocks, and the Execution Block actually increments the index variable. I will not be implementing whileTrue: for educational purposes in Java as it would require using a final int array or AtomicInteger, LongAdder or equivalent for index to be able to be incremented. There is a tweet reply from Vladimir Zakharov that shows how whileTrue could be implemented on a Functional Interface if someone wanted. SMALLTALK INTERVAL — INJECT:INTO: There is another internal iterator that I can use in Smalltalk that will not require updating a local variable for each element in the Interval. That method is named inject:into:, or as I like to call it, the Continuum Transfunctioner. Here is a sum implemented using inject:into:. testSumNumbersFromOneToTenWithInjectInto |sum| sum := (1 to: 10) inject: 0 into: [ :result :each | result + each ]. self assert: sum equals: 55. The way the above inject:into: code works can be explained as follows as each element is visited in the Interval. result := 0 result + each = ? ================= 0 + 1 = 1 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 10 + 5 = 15 15 + 6 = 21 21 + 7 = 28 28 + 8 = 36 36 + 9 = 45 45 + 10 = 55 The result of each iteration is “injected” into the block for the next iteration as the first parameter. The implementation of inject:into: for the Interval class in Pharo Smalltalk is as follows. The implementation of inject:into: on the Collection class in Pharo Smalltalk SMALLTALK INTERVAL —IN REVERSE ORDER In order to reverse an Interval, I will need to add a negative step value using the to:by: method on SmallInteger as follows. testSumNumbersFromTenToOne |sum| sum := (10 to: 1 by: -1) sum. self assert: sum equals: 55. There are also methods named reverseDo: and reversed on Interval which can take forward Interval and walk through it in reverse. The reversed method will wind up creating an array in reverse, which is why I didn’t demonstrate it here. SMALLTALK INTERVAL — ANY NUMBER The abstraction of Interval and the benefits of dynamic typing really become evident when you learn about the existence of Fraction in Smalltalk. Take the code 1/3 in Smalltalk. If you execute this code in Java for an int, you will expect a result of 0. The following is the result in Pharo Smalltalk. Dividing Small integer 1 by 3 results in a Fraction of 1/3 in Smalltalk If we want to represent a range from 1 to 10 by 1/4, we can achieve this simply by writing the following code. Interval will support any number, so understanding the types of Number that are provided in Smalltalk is helpful. The following class diagram shows the hierarchy for Number in Pharo Smalltalk. The class hierarchy for Number in Pharo Smalltalk SMALLTALK INTERVAL — MORE THAN JUST A LOOP The Interval abstraction provides more than just a lazy for loop. Interval is a lazy Collection. All of the algorithms available to SequencedCollection are also available to Interval. For example, it’s possible to collect all of the numbers in an Interval as a collection of String. testPrintString |strings expected| strings := (1 to: 5) collect: #printString. expected := Array with: '1' with: '2' with: '3' with: '4' with: '5'. self assert: strings equals: expected. The method named collect: is defined on Collection, and can be used to transform from one type to another. Here I am converting SmallInteger to String by applying the method printString to each element of the Interval. The following code filters the even values of an Interval using the select: method, and then converts the SmallInteger values to their square values and converts them to an array of String. testEvensPrintString |strings expected| strings := ((1 to: 10) select: #even) squared collect: #printString. expected := Array with: '4' with: '16' with: '36' with: '64' with: '100'. self assert: strings equals: expected. SMALLTALK — NUMBER MEETS COLLECTION Looping with a range of values in Interval is useful but somewhat limited. Looping over a collection of arbitrary values is more useful. There are many methods available on the Collection class that provide internal iterators. I am going to show what some of these methods do, and then explain how they do them. The how is where an eager loop provided by the Number class in a method named to:do: arrives. The following is the method for do: in OrderedCollection, which is one of the most commonly uses collection types in Smalltalk. OrderedCollection in Smalltalk is the equivalent of ArrayList in Java. The method do: on OrderedCollections calls to:do: on Number The method do: is the equivalent of forEach defined on Iterable in Java. In this code, the first part, firstIndex to: lastIndex do: calls the to:do: method on Number. The code for to:do: looks as follows. The method to:do: on the Number class This code uses a Block whileTrue: method to execute another Block the number of times covered by the range from self to stop. If we go back to look at the do: method in Interval, it looks somewhat similar, but requires a bit more math due to Interval having a start, stop and step value. Again, the method do: on the Interval class The following code looks very similar, but winds up taking two different paths. One goes through Number to:do:, and the other goes through Interval do:. See if you can figure out which is which. 1 to: 10 do: [:each | Transcript show: each]. (1 to: 10) do: [:each | Transcript show: each]. The code Transcript show: is the equivalent of System.out.print() in Java. If you guessed the first line uses Number to:do: and the second uses Interval do:, then you are correct, and I am finished with the Smalltalk part of the Interval, Number, and Collection looping. 3. OO FOR LOOPS IN JAVA Since Java 8, we have IntStream and LongStream, both which can represent lazy for loops over a range of int or long values. JAVA INTSTREAM — RANGE SUM The method range on IntStream is inclusive on the from and exclusive on the to. @Test public void sumIntStreamRangeOneToElevenExclusive() { int sum = IntStream.range(1, 11).sum(); Assertions.assertEquals(55, sum); } JAVA INTSTREAM — RANGECLOSED SUM The method rangeClosed on IntStream is inclusive on both the from and the to. @Test public void sumIntStreamRangeClosedOneToTenInclusive() { int sum = IntStream.rangeClosed(1, 10).sum(); Assertions.assertEquals(55, sum); } Both calls to sum on IntStream have a potential silent overflow issue to be aware of. It would have been better if IntStream sum returned a long value. So long as your sum result is less than Integer.MAX_VALUE you will be ok. If it is greater than Integer.MAX_VALUE, the int value sum could wind up negative or some other unexpected positive value. JAVA INTSTREAM — FOREACH SUM IntStream is lazy, so you have to call a terminal method like sum or forEach to force iteration to happen. If we want to calculate a sum by hand, we can use the forEach method. With this version of sum, we can widen the result ourselves to long by using LongAdder. @Test public void sumIntStreamRangeClosedForEach() { LongAdder sum = new LongAdder(); IntStream.rangeClosed(1, 10).forEach(sum::add); Assertions.assertEquals(55, sum.intValue()); } I use the LongAdder class to create an instance of an object that will be effectively final and can be used as a method reference in the forEach. LongAdder internally keeps a long value. To illustrate how LongAdder handles larger numbers and avoids int overflow, where sum does not, I will create a small range in the billions. @Test public void sumIntStreamRangeClosedInBillions() { LongAdder sum = new LongAdder(); IntStream.rangeClosed(2_000_000_000, 2_000_000_001).forEach(sum::add); Assertions.assertEquals(4_000_000_001L, sum.longValue()); // Overflow happened silently here with IntStream.sum int intSum = IntStream.rangeClosed(2_000_000_000, 2_000_000_001).sum(); Assertions.assertEquals(-294_967_295, intSum); } JAVA LONGSTREAM — SUM Another alternative to IntStream.sum that is almost always safe from overflow is LongStream.sum. The following is an example of sum on LongStream. @Test public void sumLongStreamRangeClosedOneToTenInclusive() { long sum = LongStream.rangeClosed(1L, 10L).sum(); Assertions.assertEquals(55L, sum); long bigSum = LongStream.rangeClosed(2_000_000_001L, 2_000_000_010L).sum(); Assertions.assertEquals(20_000_000_055L, bigSum); } JAVA INTSTREAM — TOLIST If we want the elements of an IntStream to be represented in a List, we have to use the IntStream API to box the stream and convert it to a List<Integer>. @Test public void filterIntStreamRangeClosedEvensToList() { List<Integer> list = IntStream.rangeClosed(1, 10) .filter(i -> i % 2 == 0) .boxed() .toList(); List<Integer> expected = List.of(2, 4, 6, 8, 10); Assertions.assertEquals(expected, list); } JAVA ITERABLE — FOREACH In Java 8, we got support for concise lambda expressions and the Java Stream API. We also got a forEach method on the Iterable interface, which allows all Collection types in Java to provide internal iterators that are optimized for each type. The following code can be used to sum the List<Integer> of even numbers from 1 to 10 that I created above. @Test public void sumListOfEvensUsingForEach() { List<Integer> list = List.of(2, 4, 6, 8, 10); LongAdder sum = new LongAdder(); list.forEach(sum::add); Assertions.assertEquals(30L, sum.longValue()); } 4. OO FOR LOOPS IN ECLIPSE COLLECTIONS One of the first custom Collection types I created in Eclipse Collections was the Interval class. I though it would be very useful to have a List<Integer> that you could create simply by specifying a range. I also thought it would be useful to have a full complement of rich internal iterators on Interval, so I had it also implement LazyIterable<Integer>. We have used Interval extensively in unit tests in Eclipse Collections. It is often the fastest way to create a List, Set, Bag, Stack or any other type where having some Collection of Integer is all we need. The following image shows the number of usages on Interval in the Eclipse Collections project. Interval usages in Eclipse Collections Project There are ~1,900 usages in the tests module alone. The Interval class has proven itself very useful in Eclipse Collections unit tests. ECLIPSE COLLECTIONS INTERVAL — SUM The following code will create an Interval from 1 to 10 and return a sum using sumOfInt. The method sumOfInt knows to widen the sum to a long. @Test public void sumIntervalOneToTen() { long sum = Interval.oneTo(10).sumOfInt(Integer::intValue); Assertions.assertEquals(55L, sum); } ECLIPSE COLLECTIONS INTERVAL — SUM EVENS The following code will include only the even numbers from 1 to 10 and sum them. @Test public void sumIntervalEvensOneToTen() { long sum = Interval.evensFromTo(1, 10).sumOfInt(Integer::intValue); Assertions.assertEquals(30L, sum); } ECLIPSE COLLECTIONS INTERVAL — AS A LIST AND AS A LAZYITERABLE There are three possible types that Interval can be used as — Interval, List, LazyIterable. @Test public void intervalIsListAndLazyIterable() { Interval interval = Interval.oneTo(5); List<Integer> list = interval; LazyIterable<Integer> lazyIterable = interval; Assertions.assertEquals(List.of(1, 2, 3, 4, 5), list); Assertions.assertEquals(Set.of(1, 2, 3, 4, 5), interval.toSet()); Assertions.assertEquals( Interval.oneTo(10), lazyIterable.concatenate(Interval.fromTo(6, 10)).toList()); } The following diagram shows the design of the Interval class in Eclipse Collections. Class diagram for Interval class in Eclipse Collections ECLIPSE COLLECTIONS INTINTERVAL — SUM Interval has proved itself extremely useful for quickly creating List<Integer> instances, especially in test code. For production use cases, where memory and performance matter, IntInterval may be a better alternative. IntInterval is an ImmutableIntList. The internal iterators on IntInterval are not lazy by default like Interval, but IntInterval does support lazy iteration via an explicit call to asLazy. The following code shows how to calculate a sum using IntInterval using both eager and lazy approaches. @Test public void sumIntIntervalOneToTen() { IntInterval intInterval = IntInterval.oneTo(10); long eagerSum = intInterval.sum(); LazyIntIterable lazy = intInterval.asLazy(); long lazySum = lazy.sum(); Assertions.assertEquals(55L, eagerSum); Assertions.assertEquals(55L, lazySum); } I reuse the instance of IntInterval to create the LazyIntIterable, after already calculating the eager sum. I did this to illustrate that an IntInterval can be reused, unlike an IntStream from Java, which may only be used once. ECLIPSE COLLECTIONS INTINTERVAL — USAGE The usage of IntInterval in Eclipse Collections is more modest than Interval, but still quite good. Usages of IntInterval in Eclipse Collections ECLIPSE COLLECTIONS LONGINTERVAL — SUM Eclipse Collections provides primitive Interval support for both int and long. The long support is provided by LongInterval. The following code shows how to calculate a sum using LongInterval using both eager and lazy approaches. @Test public void sumLongIntervalBillionOneToBillionTen() { LongInterval longInterval = LongInterval.fromTo(1_000_000_001L, 1_000_000_010L); long eagerSum = longInterval.sum(); LazyLongIterable lazy = longInterval.asLazy(); long lazySum = lazy.sum(); Assertions.assertEquals(10_000_000_055L, eagerSum); Assertions.assertEquals(10_000_000_055L, lazySum); } I reuse the instance of LongInterval to create the LazyLongIterable, after already calculating the eager sum. I did this to illustrate that a LongInterval can be reused, unlike a LongStream from Java, which may only be used once. ECLIPSE COLLECTIONS LONGINTERVAL — USAGE The usage of LongInterval in Eclipse Collections is more modest than both Interval and IntInterval. Usages of LongInterval in Eclipse Collections ECLIPSE COLLECTIONS INTINTERVAL AND LONGINTERVAL CLASS HIERARCHY I have included both hierarchies for IntInterval and LongInterval in this diagram to show that they do ultimately share a root parent interface named PrimitiveIterable. The following is the UML class hierarchy for both IntInterval and LongInterval. Class hierarchies for IntInterval and LongInterval in Eclipse Collections There was an evolution in design approach from Interval to IntInterval and LongInterval. Interval was one of the earliest containers in Eclipse Collections, and was created before immutable and primitive types were added to the framework. Interval is heavily used already so it is too late to revisit its design as it would cause too much pain to convert it to an ImmutableList<Integer> just for consistency sake. This ship has sailed, and this is now just a historical implementation decision. There are things I continue to like about both design approaches. FINAL THOUGHTS I hope this blog helped you learn about different approaches and levels of abstraction for looping in an object-oriented language. I believe it is useful to have both language and library constructs available in Java to enhance the productivity of developers when it comes to looping. Smalltalk takes a novel approach to implementing control flow that I found extremely insightful when I first learned about it in 1994. I hope the Smalltalk examples and explanations helped you learn something insightful about this venerable programming language. I believe there is still so much we can learn from the past in programming languages, and only by learning this storied past can we hope to create a better future for programmers. I intentionally did not explain either eager parallel or lazy parallel looping in this blog. This can be a natural progression once you have understood how eager serial and lazy serial looping works using lambdas. The inclusion of lambdas in Java 8 has opened up many new possibilities for productivity enhancements for Java developers. I expect that we will continue to see improvements in the language and libraries of Java further leveraging this critical feature. Thank you for reading! I am the creator of and committer for the Eclipse Collections OSS project, which is managed at the Eclipse Foundation. Eclipse Collections is open for contributions. -------------------------------------------------------------------------------- by Donald Raab at January 17, 2024 03:10 AM JANUARY 15, 2024 Jonas, Maximilian and Philip THE CHOICE OF AN IDE AND TOOL PLATFORM: ECLIPSE THEIA VS. CODE OSS by Jonas, Maximilian & Philip at January 15, 2024 12:00 AM Building custom tools and IDEs are strategic and long term investments. Choosing the right platform for building custom tools and IDEs is a critical decision for stakeholders. To aid in this crucial... The post The Choice of an IDE and Tool Platform: Eclipse Theia vs. Code OSS appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at January 15, 2024 12:00 AM Wayne Beaton COLLABORATIVE SPECIFICATION DEVELOPMENT January 15, 2024 12:00 AM Originally posted in the the February 2019 Eclipse Foundation Newsletter. The Eclipse Foundation Specification Process (EFSP), which extends the Eclipse Foundation Development Process (EDP), defines a blueprint for collaborating on specification development in open source. Committers are the ones who tend to develop most of the content. Committers have the ability to push their own contributions into their project’s source code repositories and decide whether or not to accept contributions from others. -------------------------------------------------------------------------------- January 15, 2024 12:00 AM JANUARY 08, 2024 Donald Raab WHAT IF JAVA HAD NO IF? by Donald Raab at January 08, 2024 02:34 AM What would you do? Photo by Jon Tyson on Unsplash WHERE ART THOU CONTROL FLOW? Programming in Java would be pretty hard in Java if we didn’t have if statements, for loops, while statements. These are convenient language artifacts that help us determine if, how, and when the code in our programs execute. This is the essence of control flow in a program. All programming languages have mechanisms that enable control flow to occur. Most programming languages provide control flow mechanisms in the language itself, via built-in statements. The following code shows some basic control flow statements in Java. public static void main(String[] args) { if (args.length > 1) { int i = Integer.parseInt(args[1]); for (int j = 0; j < i; j++) { System.out.println(args[0]); } } else if (args.length > 0) { System.out.println(args[0]); } else { System.out.println("Hello World!"); } } This code checks the args String array length to see if zero, one, or two arguments are supplied to the program. If zero arguments are passed, the program outputs “Hello World!”. If one argument is passed, the program outputs the argument which is arg[0]. If two arguments are passed, the program outputs the first argument (arg[0]) the number of times specified in the second argument (arg[1]). There is no safety check in this code to make sure the second parameter is actually a number. > What would you do if you didn’t have an if statement in Java? MODELING CONTROL FLOW WITH OBJECTS AND METHODS Smalltalk is a programming language that models control flow in its class library, instead of the language. There are no if statements, for loops, while statements in Smalltalk. There are instead methods on classes that make control flow possible. Methods are the abstraction that are used to model all control flow, along with code blocks, which are also known as lambdas or closures. When I was first learning Smalltalk, I had to learn where these control flow methods were and how to use them with lambdas. I believe this enabled me to become familiar with lambdas very quickly, as I had to use them everywhere I needed control structures in my Smalltalk programs. The place I first learned to look for control structures in Smalltalk was the class hierarchy for Boolean. The following is a UML class diagram showing how the Boolean type is modeled in Smalltalk. The class hierarchy for Boolean in Smalltalk and literal instances of true and false The Boolean class in Smalltalk defines methods and:, or:, ifTrue:, ifFalse:, ifTrue:ifFalse:, and ifFalse:ifTrue. Each of these methods take one or two Block parameters. A Block in Smalltalk is a type that can be represented with a literal lambda syntax. The basic syntax for a Block is square brackets with a pipe that separates parameters on the left, with expression on the right. If there are zero parameters in the Block, there will be no pipe. The following are examples of literal blocks, also known as lambdas or closures. * [] — An empty Block which returns nil when evaluated. * [true] — Zero argument Block which returns true when evaluated * [:a | a] — One argument Block which returns a when evaluated * [:a :b | a + b] — Two argument Block which returns a + b * [:a :b :c | a + b + c] — Three argument Block which returns a + b + c when evaluated. EVALUATING CONDITIONALS IN SMALLTALK Without an if statement in Smalltalk, you learn to use the instances (true and false) of the two subclasses of Boolean (True and False) with lambdas (via Block) to perform conditional logic. The following tests in Smalltalk show how conditional logic can be accomplished using the methods on the True and False classes that I documented in the diagram above. Here is a test demonstrating various results for True. testTrue self assert: (true and: [ true ]). self assert: (true or: [ true ]). self deny: (true and: [ false ]). self assert: (true or: [ false ]). self assert: (true ifTrue: [ true ]). self assert: (true ifTrue: [ true ] ifFalse: [ false ]). self deny: (true ifFalse: [ true ] ifTrue: [ false ]). self assert: (6 > 5 ifTrue: [ true ]). self assert: (4 > 5 ifTrue: [ true ]) equals: nil. Here is a test demonstrating various results for False. testFalse self deny: (false and: [ true ]). self assert: (false or: [ true ]). self deny: (false and: [ false ]). self deny: (false or: [ false ]). self assert: (false ifFalse: [ true ]). self assert: (false ifTrue: [ false ] ifFalse: [ true ]). self deny: (false ifFalse: [ false ] ifTrue: [ true ]). self assert: (6 > 5 ifFalse: [ true ]) equals: nil. self assert: (4 > 5 ifFalse: [ true ]). PASSIVE VS. ACTIVE BOOLEAN CLASS Java has both a primitive and Object form of boolean. The primitive version is named boolean. The object version is named Boolean. The Boolean class acts as a wrapper for the primitive boolean type in Java so that the primitive values can be used in generic collections like List, Set, and Map. The Boolean class only defines six instance methods as of Java 21. The methods are toString, hashCode, equals, compareTo, describeConstable, and booleanValue. This class contains no active methods that do anything. Most of the methods return a different type representation of the booleanValue contained in the wrapper. The current Boolean class in Java is what I would refer to as a passive class. It is merely an object data holder for primitive boolean. It is possible to make Boolean an active class in Java. As an experiment I defined a new Boolean sealed interface and defined True and False implementations. public sealed interface Boolean permits Boolean.True, Boolean.False { Boolean TRUE = new True(); Boolean FALSE = new False(); static Boolean valueOf(boolean value) { return value ? TRUE : FALSE; } default Boolean and(Supplier<Boolean> block) { return null; } default Boolean or(Supplier<Boolean> block) { return null; } default <R> R ifTrue(Supplier<R> trueBlock) { return null; } default <R> R ifFalse(Supplier<R> falseBlock) { return null; } default <R> R ifTrueIfFalse( Supplier<R> trueBlock, Supplier<R> falseBlock) { return null; } default <R> R ifFalseIfTrue( Supplier<R> falseBlock, Supplier<R> trueBlock) { return null; } final class True implements Boolean {} final class False implements Boolean {} } I had to provide a static method to convert a primitive boolean to the Boolean interface for this to work. I will leave it to your imagination how I overrode the default implementations of the parent Boolean interface in the True and False classes. When I had completed the implementation, I rewrote the Control Flow Java example in the first section of this blog using the new Boolean interface. This is what the code looks like with Supplier and Boolean instances in variables to provide clarity. public static void main(final String[] args) { Supplier<Object> moreThanOneSupplier = () -> { IntInterval.oneTo(Integer.parseInt(args[1])) .forEach(j -> System.out.println(args[0])); return null; }; Supplier<Object> moreThanZeroSupplier = () -> { System.out.println(args[0]); return null; }; Supplier<Object> noArgumentSupplier = () -> { System.out.println("Hello World!"); return null; }; Boolean argsGreaterThanOne = Boolean.valueOf(args.length > 1); Boolean argsGreaterThanZero = Boolean.valueOf(args.length > 0); argsGreaterThanOne.ifTrueIfFalse( moreThanOneSupplier, () -> argsGreaterThanZero.ifTrueIfFalse( moreThanZeroSupplier, noArgumentSupplier)); } In the active Boolean version of the the code, I use an IntInterval from Eclipse Collections to represent an OO version of the for loop. The active Boolean version of the code is composable and easier to move logic around with everything clearly compartmentalized. If I inline the Supplier instances, the code looks as follows. public static void main(final String[] args) { Boolean argsGreaterThanOne = Boolean.valueOf(args.length > 1); Boolean argsGreaterThanZero = Boolean.valueOf(args.length > 0); argsGreaterThanOne.ifTrueIfFalse( () -> { IntInterval.oneTo(Integer.parseInt(args[1])) .forEach(j -> System.out.println(args[0])); return null; }, () -> argsGreaterThanZero.ifTrueIfFalse( () -> { System.out.println(args[0]); return null; }, () -> { System.out.println("Hello World!"); return null; })); } For less scrolling and easier comparison, this was the original Java code from above with if statements and the for loop. public static void main(String[] args) { if (args.length > 1) { int i = Integer.parseInt(args[1]); for (int j = 0; j < i; j++) { System.out.println(args[0]); } } else if (args.length > 0) { System.out.println(args[0]); } else { System.out.println("Hello World!"); } } The code in the primitive boolean example with if statements is less verbose, but would require more copying and pasting to move logic around. The verbosity using the active Boolean interface is caused partially because I chose to use Supplier, which more closely models how Smalltalk uses its Block with Boolean. Smalltalk Boolean methods with Block allow for Boolean expressions to be formed as results from methods. If I don’t care about returning a value from a Boolean expression, I could model the methods using Runnable. The following code shows how code would look if I used Runnable instead. public static void main(final String[] args) { Boolean argsGreaterThanOne = Boolean.valueOf(args.length > 1); Boolean argsGreaterThanZero = Boolean.valueOf(args.length > 0); argsGreaterThanOne.ifTrueIfFalse( () -> IntInterval.oneTo(Integer.parseInt(args[1])) .forEach(j -> System.out.println(args[0])), () -> argsGreaterThanZero.ifTrueIfFalse( () -> System.out.println(args[0]), () -> System.out.println("Hello World!"))); } The curly braces all disappear because each branch of the if statement can be covered by a single line of code. Lambdas in Java allow me to remove the curly braces for single line lambda expressions. This removes a bunch of unnecessary lines of code, at the cost of some potential readability due to text compression and loss of natural whitespace. If I extract the Runnable instances into their own variables, the code will look as follows. public static void main(final String[] args) { Boolean argsGreaterThanOne = Boolean.valueOf(args.length > 1); Boolean argsGreaterThanZero = Boolean.valueOf(args.length > 0); Runnable moreThanOneRunnable = () -> IntInterval.oneTo(Integer.parseInt(args[1])) .forEach(j -> System.out.println(args[0])); Runnable moreThanZeroRunnable = () -> System.out.println(args[0]); Runnable noArgumentRunnable = () -> System.out.println("Hello World!"); argsGreaterThanOne.ifTrueIfFalse( moreThanOneRunnable, () -> argsGreaterThanZero.ifTrueIfFalse( moreThanZeroRunnable, noArgumentRunnable)); } FINAL THOUGHTS This blog was intended to explain in simple terms the differences between true and false in Java, and true and false in Smalltalk. Java uses statements provided by the language for user management of program control flow. Smalltalk uses Objects, Methods and Lambdas to accomplish the same. Both approaches have pros and cons. Composability and verbosity are sometimes at odds with each other. If we extract methods in the branches of logic, we can achieve better composability and less verbosity with both approaches. The active Boolean approach I demonstrated and described here could be added to the Boolean class in Java to make it an active Boolean object. This would enable the Boolean class to manage control flow through methods. The benefit of this approach would be to enable more complex if expressions which may be hard to emulate and make readable with the current Java mechanism of ternary expressions. Update: One downside that makes the active Boolean object approach impractical in Java is if you need access to any local variables outside of the lambdas used in the conditionals. This would require messy tricks using final arrays to potentially allow for updates to local variables outside of the lambda scopes. The if statement approach has access to any variables defined outside of its conditional scopes. Another downside is that Java lambdas do not have support for non-local returns, which would limit returning out of the method from the conditionals. Thanks to Oleg Pliss for pointing out these important difference between Java Lambdas and Smalltalk blocks on LinkedIn. Learning multiple languages that use different strategies to address the same problems is useful. Learning a whole new language takes time. My hope is that this bitesize comparison of basic control flow in Java and Smalltalk is useful for you to be able to understand the pros and cons different approaches. Thanks for reading! I am the creator of and committer for the Eclipse Collections OSS project, which is managed at the Eclipse Foundation. Eclipse Collections is open for contributions. -------------------------------------------------------------------------------- by Donald Raab at January 08, 2024 02:34 AM Jonas, Maximilian and Philip THE ECLIPSE THEIA PROJECT UPDATE 2023 by Jonas, Maximilian & Philip at January 08, 2024 12:00 AM 2023 has been an extraordinary year for the Eclipse Theia project, marked by significant community advancements and key feature enhancements such as the improved startup performance, the introduction... The post The Eclipse Theia Project Update 2023 appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at January 08, 2024 12:00 AM JANUARY 05, 2024 Donald Raab WHAT IF NULL WAS AN OBJECT IN JAVA? by Donald Raab at January 05, 2024 06:54 PM Brace yourself and get ready to try the red pill. Photo by Brett Jordan on Unsplash OBJECT-ORIENTED PURITY Smalltalk is often referred to as a pure object-oriented programming language. Smalltalk was created by Alan Kay, who was also the person who coined the term “object-oriented." Part of the pure object-oriented nature of Smalltalk is that “everything is an object” in Smalltalk. Because everything is an object, you accomplish programming tasks by sending messages to objects. Java is also object-oriented, but is not a pure object-oriented programming language. Java has things in it that are not objects (e.g. primitives), that require special mechanisms for handling them. Java also has a special case for handling null. In this blog, I will demonstrate and explain how Java and Smalltalk deal with absent values, referred to as null in Java, and nil in Smalltalk. This blog will not provide a full explanation of Java or Smalltalk syntax. There are resources available on the internet for both if you want to learn more. The blog will only cover what is necessary to explain the code examples I share. I will do my best to explain the examples in detail so that syntax is not a barrier to understanding. This blog is intended to make you ponder larger possibilities, not struggle with minutiae of language syntax. In the sections that follow, I will compare solutions to the same simple problems using both Java and Smalltalk. I will be using Java 21 with IntelliJ IDEA CE 2023.3.2 for the Java code examples. I will be using Pharo Smalltalk 11.0 for the Smalltalk code examples. NULL VS. NIL THE LITERAL NULL IN JAVA In Java, there is a literal named null. You can assign null to any variable that has an Object type, but the reference the variable points to is not an instance of an Object. I like to think of null as an instance of the Spoon in the movie, “The Matrix”. There is no Spoon. The following test code illustrates some of the properties of null in Java. @Test public void nullIsNotAnObject() { // Assert things about null Assertions.assertFalse(null instanceof Object); final Set<?> set = null; Assertions.assertFalse(set instanceof Set); // Assert things about exceptions thrown when calling methods on null Assertions.assertThrows( NullPointerException.class, () -> set.getClass()); Assertions.assertThrows( NullPointerException.class, () -> set.toString()); // Assert things about a non-null variable named set2 final Set<?> set2 = new HashSet<>(Set.of(1, 2, 3)); set2.add(null); Assertions.assertNotNull(set2); Assertions.assertNotNull(set2.getClass()); Assertions.assertTrue(set2 instanceof Set); // Filter all of the non-null values from set2 in the Set named set3 // Uses a static method refererence from the Objects class final Set<?> set3 = set2.stream() .filter(Objects::nonNull) .collect(Collectors.toUnmodifiableSet()); Assertions.assertEquals(Set.of(1, 2, 3), set3); } In this test, I assert that null is not an instance of Object. I initialize a final variable of type Set<?> named set to null, and further assert that set , which is null, is not an instance of Set. I assert that when I call getClass() or toString() on set, which is still null, a NullPointerException is thrown. This happens because null is not an Object. Note, I made the first declaration of the set variable final here, in order to reference the variable set in the two lambdas in the first section where I assert that NullPointerException is thrown. I could have left it as “effectively final” by not trying to reset the value, but thought I would just go with having it be explicitly final. In the second section, I create a mutable Set and store it in a variable named set2. I add null to the set. Set.of() will not accept null values, so I had to convert the immutable Set to a HashSet, which does accept null values. I add null manually to set2. I assert that set2 is not null, that its class is not null, and that set2 is in fact an instance of a Set as the compiler says it is. Finally, I filter the instances contained in set2 into a new set3 as long as they respond true to the method reference Objects::nonNull, which references a static method on Objects that returns a Predicate that checks that object != null. Once again, since null is not an object, you cannot call any methods on it that could be used to construct a valid method reference as a Predicate. This is the null in Java that we are all used to. It is not an Object. We’ve all learned to deal with null when coding in Java. Former Smalltalkers will know there is a different way. THE LITERAL NIL IN SMALLTALK In Smalltalk, there is a singleton object instance named nil. The literal nil, is an instance of the class UndefinedObject. UndefinedObject is a subclass of Object. The Object class is a subclass of… nil. This circular definition has melted many programmers brains, including mine. Somehow, this all just works. It is one of the magical aspects of Smalltalk. There’s a turtle at the top, sitting on top of another turtle, and it’s just turtles all the way down. The following test code passes using Pharo Smalltalk 11.0. testNilIsAnObject |set setNoNils| # Assert things about nil self assert: nil isNil. self assert: 'nil' equals: nil printString. # Assert things about the set variable which is nil set := nil. self assert: set isNil. self assert: set equals: nil. self assert: set class equals: UndefinedObject. self assert: (set ifNil: [ true ]). self assert: set isEmptyOrNil. # Assert things about the set variable which is not nil set := Set with: 1 with: 2 with: 3 with: nil. self deny: set isNil. self assert: set isNotNil. self deny: set equals: nil. self deny: set isEmptyOrNil. self assert: set class equals: Set. # Select all the non-nil values into a new Set name setNoNils setNoNils := set select: #isNotNil. self assert: (Set with: 1 with: 2 with: 3) equals: setNoNils. Above is what a method definition looks like in Smalltalk. I wrote a unit test method named testNilIsAnObject. I define two temporary variables named set and setNoNils by declaring them between the two vertical pipes after the method name like this |set setNoNils|. In the first section of code I assert a few things about nil, in order to demonstrate it is in fact an instance of an Object. The literal self is the equivalent of this in Java, and refers to the instance of the class that testNilIsAnObject is defined on, which has methods it inherits named assert:, deny:, and assert:equals:. I assert that nil can respond to messages like any other object in Smalltalk. I assert that nil responds true to isNil. I also assert that calling printString on nil results in the String ‘nil’ being returned. The := operator is used for variable assignment in Smalltalk. I assign the instance referenced by the literal nil to the variable named set. I assert that set responds true when sent the message isNil. I assert that the object reference contained in the set variable is an instance of UndefinedObject. I assert that calling the ifNil: message on set returns true. The code [ true ] is a zero argument block or lambda. In Java, the equivalent would be the a lambda typed as a Supplier. Finally, I assert that set responds to true when sent the message isEmptyOrNil. In the second section of code, I create an instance of a Set by using the class method named with:with:with:with: which takes four parameters. I then deny that the set isNil. I assert that that the set isNotNil. I assert the set is not equal to nil. I deny the set isEmptyOrNil, since it it neither nil or isEmpty. I then assert that the class of set is Set. In the third section of code, I select all instances contained in set into a new Set named setNoNils, if the instance returns true to the message isNotNil. The important thing here is that every subclass of Object in Smalltalk responds true or false to the message isNotNil. Here’s a final example of one of the methods available to all objects in Smalltalk, including nil. The method name is ifNil:ifNotNil:. It is a control structure method which takes two block (aka lambda) parameters. The result is determined polymorphically by the type. The set here knows it is not nil, so it will automatically execute the second block and return the result which here is the String, ‘not nil’. The literal nil will know it is nil, so it will automatically execute the first block and return the result which here is the String, ‘nil’. # Use the built in control structures around nil on all objects self assert: (set ifNil: [ 'nil' ] ifNotNil: [ 'not nil']) equals: 'not nil'. self assert: (nil ifNil: [ 'nil' ] ifNotNil: [ 'not nil']) equals: 'nil'. WHAT IF NULL WAS AN OBJECT IN JAVA? The following code is speculative, won’t compile, is untested, and unproven by Java language experts. But perhaps if null were an instance of some class named Null, the following code might be possible. @Test // NOTE THIS CODE WILL NOT COMPILE AND IS PURELY SPECULATIVE!!! public void nullIsNotAnObject() { // Assert things about null Assertions.assertTrue(null instanceof Object); final Set<?> set = null; Assertions.assertFalse(set instanceof Set); // Assert things about calling methods on null as an object Assertions.assertTrue(set.isNull()); Assertions.assertEquals(Null.class, set.getClass()); Assertions.assertEquals("null", set.toString()); // Assert things about a non-null variable final Set<?> set2 = Set.of(1, 2, 3); Assertions.assertNotNull(set2); Assertions.assertNotNull(set2.getClass()); Assertions.assertTrue(set2 instanceof Set); // Filter all of the non-null values from set2 in the Set named set3 // Uses an instance method refererence from the Object class final Set<?> set3 = set2.stream() .filter(Object::isNotNull) .collect(Collectors.toUnmodifiableSet()); // Calling methods defined on Object, that would be overridden in Null Assertions.assertEquals("null", null.ifNull(() -> "null")); Assertions.assertNull(null.ifNotNull(() -> "notNull")); Assertions.assertEquals("not null", set3.ifNotNull(() -> " not null")); } If null were an instance of a class named Null, it would also be possible to add methods like ifNull, isNotNull, ifNotNull, isEmptyOrNull to both Object and Null as Smalltalk does. The ifNull and ifNotNull methods would take some functional interface type like Supplier, Consumer, or Function and then work with lambdas and method references. In the example above, I changed the filter code to use a Predicate formed from a method reference using the method named isNotNull which would be defined on Object. The tricky part would be how to make null capable of representing any interface and class, and dispatching calls to a method named doesNotUnderstand for any methods from those interfaces that null wouldn’t understand. The Null class would have to behave like a Proxy for any type it is stored in, and forward methods sent to a class like Set, to a single method that could handle the “I’m not a Set” response appropriately. Perhaps with null as an Object in Java, it would be possible to do away with a whole variety of NullPointerExceptions. WHY IS NIL BEING AN OBJECT USEFUL? The fact nil is an instance of the UndefinedObject class in Smalltalk allows it to be treated like all other objects in Smalltalk. It can respond to basic methods that are supported on all objects. The instance nil has first class treatment in the Object hierarchy in that every object knows that it is or isn’t nil. This brings a nice symmetry to the language and libraries. This does not remove the need to handle nil by avoiding or excluding it, but nil handling is done using the same mechanisms that you would use to handle or exclude other types, by calling methods like isNil, isNotNil, ifNil:,ifNotNil:, ifNil:ifNotNil:. In a language like Smalltalk where controls structures are not defined as statements in the language, but as methods in the libraries, having nil exist like everything else, as an object, leads to a an amazing level of consistency and clarity. In my next blog I will delve more into how some other control structures in Smalltalk are defined in the class library. FINAL THOUGHTS I’m not looking to change Java, as the null ship sailed a very long time ago. What I am hoping is that I can help illuminate the possibilities for Java developers who may not have seen another way of handling null in a different object-oriented programming language. This blog was intended to explain in simple terms the differences between null in Java, and nil in Smalltalk. Learning multiple languages that use different strategies to address the same problems is useful. Learning a whole new language takes time. My hope is that this bitesize comparison is useful for you to be able to understand the pros and cons of a different approach. In my next blog, I plan to include two other literal objects in Smalltalk named true and false., and compare them to their primitive Java equivalent also named true and false. I will also compare them to the Java Object equivalent named Boolean. I will also look to explain how control structures can be defined effectively in a library, and not require special syntax and reserved words for if, for, while statements. Stay tuned, and thanks for reading! I am the creator of and committer for the Eclipse Collections OSS project, which is managed at the Eclipse Foundation. Eclipse Collections is open for contributions. -------------------------------------------------------------------------------- by Donald Raab at January 05, 2024 06:54 PM JANUARY 01, 2024 Donald Raab TWELVE PLUS ONE SUNSETS IN 2023 by Donald Raab at January 01, 2024 09:10 PM A year of biking, travel, and sunsets. Sunset on Lake Pushaw, Maine Sunsets are something we all have in common. I am thankful for all of the sunsets that 2023 afforded me. Every sunset is a blessing. There are sunsets happening around the world every minute. I hope you get to enjoy a sunset at least a couple times a month. Just in case you missed any, the rest of this blog includes some sunsets that I got to enjoy, each month in 2023. I hope you catch as many sunsets as possible in 2024. They help make each day a beautiful day. Enjoy! JANUARY 2023 Sunset on the lake in Roosevelt Park where I ride my bike FEBRUARY 2023 Sunset on the lake in Roosevelt Park where I ride my bike MARCH 2023 Sunset on the lake in Roosevelt Park where I ride my bike APRIL 2023 Sunset on the lake in Roosevelt Park where I ride my bike MAY 2023 Sunset in Acadia National Park, Maine JUNE 2023 Sunset on the bay in Long Beach Island, NJ JULY 2023 Sunset on the lake in Roosevelt Park where I ride my bike AUGUST 2023 Sunset on the bay in Long Beach Island, NJ SEPTEMBER 2023 Sunset on the bay in Long Beach Island, NJ OCTOBER 2023 Sunset on Lake Pushaw, Maine NOVEMBER 2023 Sunset on the lake in Roosevelt Park where I ride my bike DECEMBER 2023 Sunset on the lake in Roosevelt Park where I ride my bike I hope you enjoyed a sampling of my sunsets from 2023. Again, I hope you get to enjoy as many sunsets as possible in 2024 and beyond. Have a safe, healthy, and Happy New Year! I am the creator of and a Committer for the Eclipse Collections OSS project which is managed at the Eclipse Foundation. Eclipse Collections is open for contributions. -------------------------------------------------------------------------------- by Donald Raab at January 01, 2024 09:10 PM DECEMBER 29, 2023 Jonas, Maximilian and Philip ECLIPSE THEIA 1.45 RELEASE: NEWS AND NOTEWORTHY by Jonas, Maximilian & Philip at December 29, 2023 12:00 AM We are happy to announce the Eclipse Theia 1.45 release! The release contains 28 merged pull requests and we welcome four new contributors. In this article we will highlight some selected improvements... The post Eclipse Theia 1.45 Release: News and Noteworthy appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at December 29, 2023 12:00 AM DECEMBER 28, 2023 Mikael Barbero UNDERSTANDING SOFTWARE PROVENANCE ATTESTATION: THE ROLES OF SLSA AND IN-TOTO December 28, 2023 02:00 PM A software provenance attestation is a signed document that associates metadata with an artifact, encompassing details like the artifact’s origin, build steps, and dependencies. This information is critical for verifying the artifact’s authenticity and integrity. Featuring a cryptographic signature, provenance attestation ensures the document remains unaltered, playing a vital role in mitigating supply chain attacks. By scrutinizing the provenance of binaries, users can thwart the execution of malicious code on their systems. Let’s delve into some concrete examples: 1. Case of Compromised Package Manager: Imagine a scenario where an attacker gains access to a developer’s package manager account for a widely-used open-source software library. The attacker injects malicious code, builds, and publishes an updated library version. As users update the library, the malicious code spreads. With provenance attestation, users would have noticed discrepancies in the attestation, revealing the code did not originate from the official source. This proactive measure could have averted incidents like the UAParser.js library hijacking in 2021. 2. Software Supplier Compromise Example: Consider an attacker targeting a software supplier and tampering with their product. When customers use this compromised product, it could lead to further software breaches or data exfiltration. The CodeCov attack serves as a pertinent example. Here, a malicious bash uploader artifact was uploaded to CodeCov’s repository. Unknowingly downloaded and used this artifact by users resulted in stolen Git credentials and amplified the supply chain attack. Provenance attestation would have enabled users to detect the anomaly and prevent the execution of the malicious code. EXPLORING SLSA SLSA (Supply chain Levels for Software Artifacts) is a framework that enhances the security of software supply chains by defining levels for software projects to aspire to. It emphasizes the generation, distribution, and verification of provenance information. The framework currently offers three Levels under the Build track in its 1.0 version. However, it’s beneficial to revisit the initial v0.1 draft for a broader understanding of SLSA’s scope and future direction. SLSA aims to shield against tampering at various stages of the software supply chain. The initial levels presented a progressive approach to mitigating these threats. The higher the level, the more robust the supply chain security. The requirements for each level were comprehensive and provided a clear progression path. The 1.0 version narrowed its focus to the Build and Provenance requirements. The introduction of “tracks” allows for future expansion, with the newly created Build track being the sole focus in this version. Each track’s levels will eventually measure different aspects of supply chain security. SLSA 1.0 refined the division of requirements between the project and the build platform. Achieving a higher Level in the Build Track implies greater trust in the Provenance information, thereby offering better protection against threats. The project requirements in the build track are now more straightforward, largely depending on the build platform’s ability to produce provenance that meets the level’s criteria. INTRODUCING IN-TOTO in-toto is a framework centered around software attestations, focusing on the generation and verification of metadata of the software supply chain. Developers and stakeholders generate metadata reflecting actions like coding and testing. The project owner creates a layout, a critical document that defines the supply chain’s expected steps and corresponding metadata. Key components of in-toto include the layout (a JSON document outlining expected the supply chain), functionaries (individuals or automated processes executing steps), and inspections (operations that need to be performed on the final product at the time of verification). While similar to SLSA, in-toto offers broader attestation capabilities than just about provenance information and without specific guidance against a threat model, as seen in SLSA. It provides a standard format for outlining supply chain expectations and realities. SLSA AND IN-TOTO: HAND IN HAND Given in-toto’s role in software attestation and SLSA’s focus on trustable provenance, their combination is logical. SLSA recommends (but does not mandate) the use of the in-toto format for provenance information, defining the necessary information for each Build Level as a custom in-toto predicate type. This Provenance predicate aligns with in-toto’s framework: it models the supply chain as a series of steps, with each step generating attestations. These attestations are then verified against a supply chain layout, a signed metadata document defining the expected steps and their outcomes. In-toto’s ability to define use-case-specific predicates complements SLSA by providing a flexible means to capture a wide array of contextual supply chain information. This includes code reviews, test results, and runtime traces, all of which can be tailored to the specific needs of a project. By integrating SLSA Provenance with in-toto attestations, software supply chains can achieve a comprehensive verification process. This integration allows for detailed tracking and verification of each step in the supply chain, from code development to the final build, ensuring that all components meet the specified security and integrity standards. In practice, this means that when a build service performs a build, it not only records the SLSA Provenance of the resulting artifact but also integrates this with the broader set of in-toto attestations, encompassing various aspects of the build process. These attestations, when combined, offer a more detailed and trustworthy view of the software’s development and build process, enhancing the overall security posture. CONCLUSION Software provenance attestation is crucial for mitigating a multitude of security threats. Frameworks like SLSA and in-toto play a significant role in enabling these attestations, ensuring the integrity and security of software supply chains. In a forthcoming blog post, we’ll explore in detail the process of creating SLSA provenance attestations specifically for Java/Maven projects. This deep dive will provide valuable insights and practical steps for developers looking to enhance the security of their Java applications. Keep an eye out for this upcoming post for a comprehensive guide on implementing these security measures. -------------------------------------------------------------------------------- December 28, 2023 02:00 PM DECEMBER 26, 2023 Mikael Barbero UNDERSTANDING SOFTWARE PROVENANCE December 26, 2023 02:00 PM In the ever-evolving landscape of open-source software development, the creation and distribution of artifacts—such as compiled binaries, libraries, and documentation—represent the tangible results of a multifaceted process. These artifacts are more than just a collection of code; they are the final product of myriad decisions, alterations, and contributions, each with its unique narrative. It’s essential to grasp these narratives or the provenance of these artifacts, to secure the supply chain effectively. Moreover, the integrity and security of these artifacts are paramount, as they underpin the trust and reliability users expect. This post aims to demystify the concept of provenance for these released artifacts. We will delve into why a comprehensive understanding of their origins and the path they take—examined through the lens of the journalistic 5W1H (Who, What, When, Where, Why, and How)—is crucial for enhancing the security posture of an open source project’s supply chain. UNDERSTANDING ARTIFACT PROVENANCE Provenance in the context of released artifacts is a narrative of origin and evolution. It’s a detailed account of an artifact’s lifecycle from its inception in the developer’s mind to its final form when it is released to the world. This lineage includes every modification, every build, and every individual who has interacted with the artifact. A well-documented provenance is not just an academic record; it’s a testament to the artifact’s integrity, a shield ensuring that what users download and interact with is precisely what was intended, untainted by tampering or malicious alterations. CHALLENGES IN TRACKING ARTIFACT PROVENANCE However, maintaining a comprehensive provenance is fraught with challenges. The complexity of dependencies where each layer has its own story, the sheer volume of artifacts and the speed at which they are updated, and the diverse sources they are compiled from, all contribute to a labyrinth of information that needs to be meticulously managed. Add to this the lack of standardized tools and practices for documenting and verifying provenance, and the task can seem Herculean. Yet, these challenges are not insurmountable barriers but rallying calls for robust solutions, for the security and reliability of the software supply chain hinge on this very capability. PROVENANCE INFORMATION If we consider what the provenance information of released artifacts should comprise, it’s akin to the outcome of any solid journalistic work: it should address the 5W1H (What, Who, Why, When, Where, and How) questions. At a fundamental level, the answers to these questions should be as follows. * The What concerns identifying the released artifacts themselves, giving them an identity through an unambiguous identifier (e.g., using the Common Platform Enumeration (CPE) scheme or a Package URL). It can also cover the licenses of the artifacts, a list of the artifact’s dependencies, their respective licenses, and how they have been retrieved, among other things. This is more commonly known as a Software Bill of Materials (SBOM) and can be considered a part of the provenance information to be released with an artifact. Understanding the ‘What’ means having a clear, auditable trail of the components that form the backbone of your software, enabling you to assess, manage, and secure your software supply chain effectively. * The Who can be as straightforward as identifying who triggered the release (or the build of the release) of the artifacts. It might also extend to include additional information about who contributed to the code included in this release, whether from the project’s inception or since the last release. Details regarding any signed Contributor License Agreement (CLA) or accepted Developer Certificate of Origin (DCO) by contributors can also be incorporated. Knowing who contributed what aids in tracking changes, auditing contributions, and most importantly, ensuring that only trustworthy code is incorporated into your projects. * The Why pertains to understanding the reason behind the release: is it to fix a security vulnerability? Is it a scheduled release following the regular cadence? It might also involve tracking why a particular library was updated. As such, the release notes can be considered a (non-structured) part of the provenance information in this context. This aspect of provenance is about context and rationale, which is crucial for assessing the impact of changes on the overall security and functionality of your software. * The When is straightforwardly about keeping track of the time of the release, to anchor it in a broader historical context. It can also involve recording the timing of the various contributions made prior to the release. * The Where concerns tracing the locations of the various components that led to the released artifact. Where was the code developed and stored? Was it in a secure, trusted repository, or did it come from a less reliable source? Where was it built? Knowing these details can be the difference between a secure application and a vulnerable one. Coupled with the answer to the When, this mirrors the journalistic approach of establishing timelines and locations, helping you create a more comprehensive narrative of your software’s development and enhancing security and control over your project’s lifecycle. * How relates to the methods, tools, and practices used to track and verify the origins of your code. It encompasses the mechanisms you implement to ensure that every line of code can be traced back to its source, thus ensuring integrity and reliability. This not only refers to the build pipelines and toolchains used to build and release the artifacts but also includes information about software development best practices such as code review, branch protections, secret scanning, and more. While the full details of implementing software provenance attestation will be covered in a future post, all this information can already be delivered to downstream users of your project in a simple text file, for example, in the form of buildinfo files. Although not exhaustive, buildinfo files are a testament to the commitment to transparency and security, serving as a foundational element for more advanced tools and practices. THE IMPORTANCE OF ARTIFACT PROVENANCE FOR SECURITY The narrative of provenance is critical for security. In a world where the threat landscape is as vast as it is vicious, the lack of provenance can lead to severe breaches. Compromised artifacts, malicious code insertions, and other vulnerabilities are not just theoretical risks; they are stark realities. A robust provenance framework is not just a defensive mechanism; it’s a foundational pillar in building a secure, trustworthy supply chain. To enhance the security posture of its projects, understanding and implementing provenance practices is not an option; it’s an imperative. HOW TO TRUST PROVENANCE DATA? Trusting provenance data generated during the build process is a commendable start. However, recognizing its limitations is crucial for establishing a more robust system of trust INTEGRITY OF BUILD-GENERATED PROVENANCE The integrity of build-generated provenance is inherently fragile. It’s as secure as the environment in which it’s stored and the transport methods used to deliver it. Imagine if a malicious actor gains access to the storage backend or intercepts the transport protocols; they could alter the provenance data, rendering it unreliable. A common countermeasure involves signing the provenance files or data. Digital signatures provide an additional layer of trust by making any tampering with the provenance data after its creation detectable. However, this step, while beneficial, is not a complete solution. VULNERABILITY OF THE BUILD SCRIPT Another critical aspect to consider is the vulnerability of the build script itself. If the build pipeline is compromised, then so is the provenance it generates, whether signed or not. A compromised script might produce misleading information, feeding false data into what should be a trusted record. This scenario underscores a crucial realization: to genuinely trust the provenance data, the responsibility for generating it should shift away from the build pipeline to the build platform. THE SHIFT IN RESPONSIBILITY By making the build platform responsible for this task and having it sign the generated data, we create a system where the provenance is not only more resistant to tampering but also inherently more trustworthy. The build platform, ideally, is indeed in a unique position to observe and record the build process. It has access to all the information needed to generate accurate provenance data. This shift doesn’t eliminate the risk of compromise, but it does mean that any tampering with the build pipeline won’t affect the integrity of the provenance data we rely on. SECURING THE BUILD PLATFORM It’s important to note that this approach is not a silver bullet. The build platform itself can be compromised, and securing it is a complex task that goes beyond the scope of this discussion. However, it’s an essential consideration for a truly trustworthy system. Even with a secured build platform, the environment generating the provenance data must also be secure to genuinely trust the data’s integrity. In conclusion, while build-generated provenance is a valuable first step, it’s essential to be aware of its limitations. Shifting the responsibility to the build platform and securing that platform are critical moves towards a more trustworthy and resilient system. However, remember that in the realm of security, no solution is absolute. Each layer of trust we add is a step towards a more secure ecosystem, but vigilance and ongoing improvement are always necessary. CLOSING NOTES As we conclude our exploration of software provenance through the detailed lens of the 5W1H framework, it’s clear that this is not merely an exercise in compliance or best practices. It’s a fundamental shift in how we approach software development and security. Understanding the ‘Who,’ ‘What,’ ‘When,’ ‘Where,’ ‘Why,’ and ‘How’ of your artifacts isn’t just about enhancing security—it’s about instilling a culture of transparency and excellence. The journey we’ve outlined is challenging, with numerous complexities and hurdles. However, the path to a secure and reliable software supply chain is not only necessary but also attainable with the right mindset and tools. Adopting a provenance-first approach is a paradigm shift. It means engraining the tracking and verification of the origin and journey of artifacts into the very fabric of the development and release process. It’s about integrating provenance tracking into the build process, adopting tools that automate and standardize provenance documentation, and fostering a community culture where knowledge, tools, and best practices are shared freely and openly. As we look forward to diving into the practicalities of implementing a robust software provenance strategy in our next installment, remember that your engagement and continuous learning are vital. The principles and practices discussed here are just the beginning. With a blog post about the Supply-chain Levels for Software Artifacts (SLSA) framework on the horizon, we will have the guidelines and tools at our disposal to prevent tampering, improve integrity, and secure our packages and infrastructure. We invite you to not just read but actively participate in shaping the future of software provenance. Join us and the Eclipse Foundation community in discussing and advancing these crucial topics. Your insights, experiences, and commitment are key to driving change and fostering a more secure digital world. Together, let’s embrace the provenance-first mindset and lead the charge towards a future where software development is synonymous with security, transparency, and trust. -------------------------------------------------------------------------------- December 26, 2023 02:00 PM DECEMBER 23, 2023 Mikael Barbero ECLIPSE FOUNDATION EMBRACES SIGSTORE December 23, 2023 10:00 AM As part of our ongoing commitment to fortifying the security of our software development processes, we’re excited to announce a significant enhancement for all Eclipse Foundation projects utilizing our Jenkins infrastructure. This advancement comes with the integration of Sigstore, a cutting-edge solution designed to bolster the security and integrity of software supply chains. By exploring the integration of Sigstore within the Eclipse Foundation’s Jenkins setup, this article sets out to demonstrate how this advancement is reshaping secure software development and deployment for Eclipse Foundation projects. WHAT IS SIGSTORE? Sigstore represents a shift in the way we secure software artifacts. This open-source tool offers a transparent and secure method for both signing and verifying software artifacts, including binaries and container images. It’s designed to make digital signing simpler for developers by eliminating the complex management of keys. This allows users to confidently verify the artifacts’ origins and integrity. At its core, Sigstore’s “keyless” signing associates a signature with the signer’s identity, rather than a fixed set of keys. The process begins when a developer obtains an identity token from an identity provider and creates a temporary public/private key pair in memory. This token, along with the public key, is sent to Sigstore’s certificate authority, which verifies the information against the token issuer. If the identity provider is recognized and the token is valid, Sigstore’s authority issues a short-lived certificate that binds the public key to the developer’s identity. This binding is crucial as it securely attaches the identity of the signer to the artifact being signed, ensuring traceability and accountability. During the signing phase, a transparency log entry is created. This entry is part of a public, tamper-evident ledger that records the artifact’s hash, the public key used, and the signature, all with a timestamp to validate the software’s integrity and origin at the time of signing. Once the signing is complete, the private key is discarded, and the short-lived certificate soon expires. The trust in the verification process comes from this transparency log, not from the signer’s ability to safeguard a private key. Users can validate the logged details against the artifact to confirm its integrity and origin. This verification can occur online, with real-time access to the transparency log for the most up-to-date information. For environments where the transparency log is not accessible, such as air-gapped systems, offline verification is also possible. In these scenarios, the signed artifacts should be accompanied by the certificate and public key, allowing verification against these components without needing access to the transparency log. This method relies on the trust established by the Sigstore-issued certificate, ensuring the authenticity of the artifact as confirmed by a trusted CA. This methodology goes beyond improving convenience; it serves as a strategic defense against a range of cyber threats, particularly those targeting software supply chains. By eliminating the need for developers to manage long-lived keys and by providing a transparent log of signed artifacts, Sigstore mitigates risks like code tampering (e.g., when used to sign commits) and unauthorized access, which are prevalent in supply chain attacks. USING SIGSTORE ON ECLIPSE FOUNDATION’S JENKINS INSTANCES The Eclipse Foundation has recently become a recognized identity provider for Sigstore’s certificate authority. This development is a game-changer for projects within the Foundation for several reasons: 1. Managed Identity Verification: With this status, the Eclipse Foundation can issue tokens for projects’ bot accounts. These tokens are recognized and verified by Sigstore, which then issues certificates based on the Eclipse Foundation’s managed identity. This process ensures a trusted link between the artifact and the Foundation, further bolstering trust and security. 2. Streamlined Artifact Signing: Initially focusing on bot accounts, this setup is tailored for automated processes, like those running on Jenkins instances. Projects can seamlessly sign artifacts during the build and release process, integrating security into the CI/CD pipeline without added complexity. 3. Extended Trust and Compliance: Having the Eclipse Foundation as a recognized identity provider means that artifacts signed through this process are backed by a trusted entity, meeting higher standards of security. It’s worth noting that Sigstore can be used by all of Eclipse Foundation projects hosted on GitHub and using GitHub Actions, as detailed in GitHub’s blog post. For Eclipse Foundation projects that utilize both Jenkins and GitHub, this creates a cohesive and secure workflow for signing artifacts across platforms. IMPLEMENTING SIGSTORE IN YOUR JENKINS WORKFLOW If you want to start signing artifacts with Sigstore’s keyless process in your Jenkins workflow, it’s very easy: * The very first step is to open a help desk ticket to ask us to allow our identity provider to issue tokens that would be verifiable by Sigstore. We also configure your Jenkins instance with some new credentials. * Adapt the workflow below to your use case and profit. pipeline { agent any stages { stage('Prepare') { steps { sh ''' echo "Hello World" > README curl -sSL -o cosign https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64 chmod u+x cosign ''' } } stage('Sign') { steps { withCredentials([usernamePassword(credentialsId: 'cbi-dev-sigstore', passwordVariable: '_BOT__PASSWORD', usernameVariable: '_BOT__USERNAME')]) { sh ''' IDP_DATA=$(mktemp) OID_TOKEN=$(mktemp) chmod 600 "${IDP_DATA}" "${OID_TOKEN}" trap 'rm -vf "${IDP_DATA}" "${OID_TOKEN}"' EXIT cat <<EOF > "${IDP_DATA}" username=${_BOT__USERNAME} &password=${_BOT__PASSWORD} &grant_type=password &client_id=sigstore EOF curl -sSL -X POST \ --url https://auth.eclipse.org/auth/realms/sigstore/protocol/openid-connect/token \ --header "Content-Type: application/x-www-form-urlencoded" \ --data @"${IDP_DATA}" \ | jq -r ".access_token" \ | head -c -1 > "${OID_TOKEN}" ./cosign sign-blob README -y --bundle README.bundle --oidc-issuer=https://auth.eclipse.org/auth/realms/sigstore --identity-token="${OID_TOKEN}" ''' } sh ''' ./cosign verify-blob README --bundle README.bundle --certificate-oidc-issuer=https://auth.eclipse.org/auth/realms/sigstore --certificate-identity=cbi-dev@eclipse.org ''' } } } } During the Prepare phase, we just download the cosign tool, which is a CLI client to sigstore. We could also go the hard way and only communicate with Sigstore via its REST API with curl, but cosign make is much simpler. During the Sign phase, we start by retrieving the project’s bot credentials and use curl to retrieve a token from the Eclipse Foundation identity provider. We aim at making this phase transparent to projects in the future and create the token automatically on each workflow startup, à la GITHUB_TOKEN. We then pass this token to the cosign tool to sign the README file. Note that we save the file what cosign call a --bundle. This bundle is just an aggregate of the signature and the certificate of the signature. This avoids having to distribute 2 files along with the signed artifacts, simplifying the transfer and the verification. At the end of the signing process, the cosign tool prints the index of the transparency log entry that has been created: tlog entry created with index: 58260299 One can then check the information relative to this operation by going on the transparency log web interface at https://search.sigstore.dev/?logIndex=58260299. Finally, for testing purpose, we verify the signature during the Verify phase. We reuse the bundle we just introduced, and ask the cosign tool to verify that the file has been signed with a certificate for the identity cbi-dev@eclipse.org as issued by the identity provider https://auth.eclipse.org/auth/realms/sigstore. + ./cosign verify-blob README --bundle README.bundle --certificate-oidc-issuer=https://auth.eclipse.org/auth/realms/sigstore --certificate-identity=cbi-dev@eclipse.org Verified OK CONCLUSION We encourage all project teams within the Eclipse Foundation to adopt this new capability. The integration is straightforward and offers significant benefits in securing your software artifacts. By doing so, you’ll be taking a proactive stance in securing your projects and contributing to a safer software supply chain. In conclusion, the adoption of Sigstore within our Jenkins infrastructure is more than just a technical update; it’s a commitment to the security and integrity of the Eclipse Foundation projets. We look forward to seeing its positive impact on our community. We welcome feedback and questions from the Eclipse Foundation community on this journey together towards a more secure software future. -------------------------------------------------------------------------------- This work was made possible thanks to the funding the Foundation received from the Alpha-Omega Project. -------------------------------------------------------------------------------- December 23, 2023 10:00 AM DECEMBER 20, 2023 Eclipse Announcements UNVEILING OPEN CODE EXPERIENCE by Shanda Giacomoni at December 20, 2023 04:54 PM Unveiling Open Code Experience Shanda Giacomoni Wed, 2023-12-20 11:54 We’re thrilled to announce Open Code Experience 2024, a new conference for our vibrant community of communities. Watch for updates at opencode-x.org. URL https://blogs.eclipse.org/post/thabang-mashologu/unveiling-open-code-experience -------------------------------------------------------------------------------- by Shanda Giacomoni at December 20, 2023 04:54 PM DECEMBER 19, 2023 Eclipse Announcements GOOD NEWS ON THE CYBER RESILIENCE ACT by Shanda Giacomoni at December 19, 2023 02:09 PM Good News on the Cyber Resilience Act Shanda Giacomoni Tue, 2023-12-19 09:09 The European Union’s proposed Cyber Resilience Act (“CRA”) as the final revisions agreed to in the trilogue negotiations appear to largely exclude the open source community from its scope. URL https://eclipse-foundation.blog/2023/12/19/good-news-on-the-cyber-resilience-ac… -------------------------------------------------------------------------------- by Shanda Giacomoni at December 19, 2023 02:09 PM Mike Milinkovich GOOD NEWS ON THE CYBER RESILIENCE ACT by Mike Milinkovich at December 19, 2023 09:01 AM As the title says, there is good news to share on the progress of the European Union’s proposed Cyber Resilience Act (“CRA”) as the final revisions agreed to in the trilogue negotiations appear to largely exclude the open source community from its scope. I have written (here and here) and spoken extensively about our concerns with the European Union’s proposed Cyber Resilience Act (“CRA”) in the past. As originally drafted, the CRA would have had an enormous negative impact on both the open source community and the EU’s innovation economy. In short, it would have required most open source projects (and every open source project that matters) made available in Europe to meet unrealistic regulatory requirements related to their secure software development and maintenance. OSS projects would have also been required to affix the CE Mark on their releases certifying that these regulatory requirements had been met, which additionally would have required outside audits performed for critical infrastructure projects such as operating systems. You can read the links above if you want to get a full understanding of the dire implications of the original draft of the CRA. While the Eclipse Foundation has always shared the goals of the CRA to improve the state of security in the software industry, we have been very vocal in expressing our concerns with how unrealistic requirements could damage the open source community and Europe’s innovation economy. We have been very active in raising community awareness of the issues over the past year. For example, we helped facilitate two open letters co-signed with many of our peer organizations detailing the issues (here and here). But we also invested a great deal of time and energy in constructively engaging with policymakers by providing explanations of the functioning of our ecosystems and technologies. The European Commission, the European Parliament, the Council through the Spanish Presidency, as well as numerous policy makers at the national level have all been open to our contributions and recognise our efforts to protect European open innovation. I would like to thank my colleagues Gesine Freund, Enzo Ribagnac, Mikaël Barbero, and Gaël Blondelle for their many contributions to this process. We were not alone in these efforts. An assuredly incomplete list of other open source organizations that contributed to raising awareness includes: Apache Software Foundation, Internet Society, Free Software Foundation Europe, Linux Foundation, Mozilla Foundation, NLNet Labs, Open Source Initiative, Python Software Foundation, The Document Foundation, and many others. OpenForum Europe played a pivotal role in facilitating communication between these groups, and Ciarán O’Riordan at the OFE deserves recognition for his yeoman’s effort in coordinating the community’s input throughout the discussions on the CRA. On December 1st it was announced that the EU co-legislators had reached political agreement on the CRA. Although the final text is still being worked on, we are happy to report the open source community has been listened to. The revised legislation has vastly improved its exclusion of open source projects, communities, foundations, and their development and package distribution platforms. It also creates a new form of economic actor, the “open source steward,” which acknowledges the role played by foundations and platforms in the open source ecosystem. This is the first time this has appeared in a regulation, and it will be interesting to see how this evolves. The Eclipse Foundation will be investing a great deal of effort into helping refine this concept and its implementation to ensure it aligns with the norms of the open source community. The final revisions also extended the implementation phase to three years, which means full compliance with the CRA will likely start in early 2027. OpenForum Europe’s recent press release on the CRA is certainly worth a read for additional context. It is important to recognize and thank the many people that were involved in achieving this significantly better outcome. Both those who were involved from the side of the co-legislators who genuinely listened and made extensive improvements, and the many people from the open source community who invested their time and energy into explaining the unique requirements of the open source community. But this journey is only beginning. It is important to note that while the CRA has been revised to largely exclude the open source community from its scope, this legislation will still have an enormous impact on the software industry as a whole. Open source projects will not be required to directly implement the mandated processes described in the CRA. But every commercial product made available in the EU which is built on top of those open source projects will. For the first time in the software industry’s history, it will soon have regulatory requirements for secure software development and maintenance. I predict this will put pressure on projects and communities to enhance their processes to assist in downstream commercialization. After all, if a project is used in hundreds of products, doing the bulk of the CE Mark conformance work in the project rather than repeating the effort hundreds of times makes enormous sense. But as we all know, OSS projects at the moment simply do not have the resources to do this. It is impossible to know how all of this will play out, but an optimistic hypothesis is that once companies are required by law to meet secure software development practices they will be incented to invest in the upstream projects they rely upon. The Eclipse Foundation will be working hard to ensure that we evolve to support the needs of our committers, projects, and members in order to support the implementation of these new regulatory requirements. We will be discussing this early in the new year. Interesting times! -------------------------------------------------------------------------------- by Mike Milinkovich at December 19, 2023 09:01 AM DECEMBER 18, 2023 Sharon Corbett INDUSTRY COLLABORATION IN ACTION: ECLIPSE SDV, OPENMOBILITY AND THREADX by Sharon Corbett at December 18, 2023 04:21 PM Industry Collaboration in Action: Eclipse SDV, OpenMobility and ThreadX If you’ve read my two previous blog posts, you already have an understanding of how interest groups and working groups provide two different mechanisms for industry collaboration, how your organisation can get started on its own collaboration journey, and the numerous benefits that come from collaborating on open source software at the Eclipse Foundation. But the best way to understand what joining an industry collaboration can do for your organisation is by taking a look at some of our current collaborations. The Eclipse Foundation currently hosts 21 Industry Collaborations focused on various technologies and domains, from developer tools to cloud native Java, IoT and beyond. One working group that has experienced considerable momentum recently is Eclipse Software Defined Vehicle (SDV). Over 40 organisations have joined Eclipse SDV since the working group’s launch in 2022. Members range from automotive OEMs and Tier-1’s, to enterprise software companies, to the cloud hyperscalers. This is driven by the fact that the software defined vehicles of the future will be highly connected, and the systems engineering requirements will span deeply embedded and safety critical components all the way to connectivity to cloud-based IT systems. Eclipse SDV members collaborate on non-differentiating technologies and share best practices, which decreases their time to market and makes things easier for their developers. The move to open source software is a significant departure from the norm for the automotive industry, which has historically embraced proprietary solutions where common building blocks are often replicated. Visit the Eclipse SDV project page to see the code first approach across more than 20 projects. While interest groups are fairly new to the Eclipse Foundation, there are a few active collaborations that are benefiting from the foundation’s governance structure, like Models for Privacy Engineering, OpenMobility and Eclipse ThreadX. In the case of OpenMobility, a group of four members came together to work on evolving and driving adoption of mobility modelling and simulation technologies. Its members are interested in delivering a methodology and a framework of tools that are based on validated models. These tools are intended to be recognised as “standard tools” in industry applications and academia for mobility modelling and simulation. OpenMobility has declared interest in Eclipse MOSAIC and Eclipse SUMO and Eclipse openMCx. ECLIPSE THREADX: A NEW ERA FOR EMBEDDED RTOS TECHNOLOGY The Eclipse Foundation’s newest interest group is a unique case. With Microsoft contributing Azure RTOS to the Eclipse Foundation under the Eclipse ThreadX project last month, plans are underway to establish a working group that will consolidate the project, preserve its certifications, promote the brand, and grow the technology’s ecosystem and community. However, this cannot be done without first establishing an industry-supported, sustainable funding model for Eclipse ThreadX. This will be the focus of the new ThreadX Interest Group. The founding members of this interest group intend to form a working group dedicated to the project after investigating key topics around the potential working group’s funding and goals. Any company with an interest in embedded technology is welcome to join the interest group to define ThreadX’s future. While interest groups are not necessarily intended to serve as a jumping off point for new working groups, ThreadX shows just how flexible this collaboration model can be. With interest groups, members can come together to share a common interest in a topic or domain in a vendor-neutral manner. What members choose to collaborate on is up to them. To learn more about our industry collaborations and our current showcase, please visit eclipse.org/collaborations, and contact us if you are interested in joining and/or forming a new collaboration! Sharon Corbett Mon, 2023-12-18 11:21 -------------------------------------------------------------------------------- by Sharon Corbett at December 18, 2023 04:21 PM Mikael Barbero ELEVATING SOFTWARE SUPPLY CHAIN SECURITY: ECLIPSE FOUNDATION'S 2FA MILESTONE December 18, 2023 04:00 PM In the realm of open-source software, security of the supply chain is not just a concern—it’s a crucial battleground. The Eclipse Foundation, at the forefront of this fight, has taken a decisive step with its 2023 initiative to enforce two-factor authentication (2FA) across its platforms. This move is more than a security upgrade; it’s a testament to the Foundation’s commitment to safeguarding the open-source software supply chain against escalating threats. The traditional reliance on password-based authentication poses a significant risk, especially in open-source software development. As highlighted in a previous article, compromised developer accounts can become conduits for malicious code, affecting not only the developers themselves but also downstream users. The alarming 742% average annual increase in software supply chain attacks in recent years underscores the urgency of robust security measures. Recognizing this threat, the Eclipse Foundation has championed the shift to more secure authentication methods with 2FA. The road to comprehensive 2FA implementation was not without its challenges. One of the main hurdles was addressing misunderstandings about what 2FA entails. For example, there was confusion about whether 2FA required hardware tokens. Additionally, concerns arose about what actions to take in case of a loss of the second factor. The Foundation tackled these issues head-on through repeated communication and education, providing clear, accessible information to demystify 2FA and allay fears. Feedback and insights from the Eclipse community were invaluable in shaping the 2FA initiative. A particularly unique challenge came from members who were unable to use mobile phones or hardware tokens at their workplaces due to internal policies. To address this, the Foundation helped identify software solutions that facilitated TOTP-based 2FA, aligning with the IT requirements of these members: we were committed committed to help everybody and find practical solutions to all problems. For the Eclipse Foundation, 2FA is just one aspect of a broader vision to harden software supply chain security. Recognizing that the first line of defense starts with developers, the Foundation has positioned itself as a role model in software supply chain security. Beyond 2FA, it is actively helping its projects to better understand and communicate their dependencies through Software Bill of Materials (SBOMs), manage vulnerabilities in these dependencies, and secure their build pipelines against potential threats. These initiatives are set to continue throughout 2024. The impact of the 2FA enforcement initiative is clearly demonstrated by the significant adoption rates within the Eclipse community. On GitHub, 91% of our committers have now enabled 2FA, with 63% of organizations achieving complete member compliance. In 2024, we will take the final steps to fully enforce 2FA for committers on GitHub, ensuring that all organizations will exclusively have members with 2FA enabled. For projects hosted on gitlab.eclipse.org, 63% of committers have enabled 2FA. Since December 11th, committers are required to enable 2FA upon signing in—if they haven’t already—before they can proceed with any other actions. The 2FA enforcement initiative of the Eclipse Foundation represents an essential measure in hardening the security of the open-source software supply chain of its projects. This initiative underscores the significance of shared responsibility and vigilance in cybersecurity. -------------------------------------------------------------------------------- This work was made possible thanks to the funding the Foundation received from the Alpha-Omega Project. -------------------------------------------------------------------------------- December 18, 2023 04:00 PM Mike Milinkovich CELEBRATING ECLIPSE THEIA’S MILESTONE: FULL COMPATIBILITY WITH VS CODE EXTENSION API by Mike Milinkovich at December 18, 2023 12:09 PM We are thrilled to announce a landmark achievement in the evolution of Theia: full compatibility with the Visual Studio Code (VS Code) extension API, marking a significant milestone in the journey of Theia towards becoming a universally adaptable development environment. UNLEASHING A WORLD OF FEATURES WITH VS CODE EXTENSIONS Theia has supported hosting VS Code extensions for many years. The integration of the VS Code extension API unlocked an unprecedented array of features for Theia-based applications. This compatibility means that users can leverage the extensive ecosystem of VS Code extensions, bringing thousands of new capabilities to Theia. With the completion of a recent initiative, Theia now is fully compatible with the VS Code API allowing the vast majority of VS Code extensions to be used in any Theia-based application. Of particular note is the recent addition of support for notebook editors, a game-changer that opens Theia to new audiences, such as data scientists, who rely heavily on notebook interfaces for languages like Python. A SYMPHONY OF COLLABORATION This achievement is not just a technical milestone; it is a testament to the power of collaborative open-source development. The original VS Code API compatibility implementation was contributed by Red Hat. The journey to full compatibility, initiated by STMicroelectronics and crafted through the concerted efforts of EclipseSource, Ericsson, Typefox, and other contributors, has been one of shared vision and united effort. STMicroelectronics and EclipseSource played a pivotal role in establishing an open, structured process for regular API comparison and issue tracking. This approach facilitated a broad-based contribution, allowing various organizations to contribute effectively to the project. EMPOWERING THE DEVELOPER COMMUNITY The compatibility with the VS Code API multiplies Theia’s effectiveness as a development platform. For developers, this means access to the latest and most advanced tools available in the VS Code ecosystem, significantly enhancing both the adopter and user experience with Theia. OVERCOMING CHALLENGES THROUGH OPEN SOURCE COLLABORATION The journey to this point wasn’t without challenges. Initially, contributions were focused only on specific missing API features needed for particular extensions used by contributors. However, the structured process initiated by STMicroelectronics set a new direction – aiming for complete compatibility. This approach significantly simplified the distribution and parallelization of work. As a result, this process galvanized the open-source community, leading to a surge in contributions and exemplifying the true spirit of collaborative innovation. MAINTAINING THE PACE: THE FUTURE ROADMAP For nearly half a year, Theia has maintained full compatibility with the VS Code extension API. The commitment to this standard is unwavering. With regular scans of new VS Code API updates, contributors that Theia stays in lockstep with the latest advancements, continually integrating new features and capabilities. JOIN US IN THIS CONTINUAL JOURNEY As we celebrate this milestone, we also look to the future. Theia’s journey is ongoing, and the path ahead is as exciting as the accomplishments behind us. We invite the developer community, contributors, and enthusiasts to join us in this vibrant and continually evolving project. Together, we will keep pushing the boundaries of what’s possible in open-source development environments. Let’s continue to shape the future of software development tools with Theia. Your contributions, feedback, and engagement are not just welcome – they are essential to our shared success. Here are a couple of links to get you started in your journey with Eclipse Theia: * Theia’s website * Project overview page * Github organization * Project readme * Getting started with Theia * Contributing to Theia -------------------------------------------------------------------------------- by Mike Milinkovich at December 18, 2023 12:09 PM Donald Raab MEMORIES OF TWENTY YEARS OF ECLIPSE COLLECTIONS DEVELOPMENT by Donald Raab at December 18, 2023 12:07 AM If you want to go far in open source, go together. My wife and daughter, in our apartment in London in early 2004, the year Eclipse Collections was created FAMILY FOR THE WIN The open source Eclipse Collections Java library had humble beginnings solving memory problems in a Java application I was working on in 2004. I lived and worked in London, along with my wife and daughter, for most of 2004. Eclipse Collections and my son were conceived in London. I credit the weather in London for both. I got used to carrying an umbrella and having a plastic covering on our pram when wandering about the city and country (a pram is a baby stroller for those in the US). I learned to be prepared for potential variations in the weather a few times a day. Our trip to London remains one of my fondest memories for many reasons. London will always feel like my second home. My wife and daughter, ready for all weather exploring, outside Buckingham Palace in early 2004 I’ve been working on Eclipse Collections for twenty years. I was never alone in my journey, even when the journey felt lonely. My family was there with me every single day. They were there through all of the challenging problems I was solving, in both of the banks I have worked in the past twenty years. My family may not have understood what I was working on or why, but it didn’t matter to them. They understand the joy that programming brings me. Me in my Smalltalk solutions t-shirt playing on my computer with my daughter in London in 2004 In October 2022, my wife and daughter saw me give a talk in person at JavaOne 2022 in Las Vegas. They saw me deliver the Surviving Open Source talk, which I first delivered as the keynote for IntelliJ IDEA Conf 2022. This was the first time they ever saw me speak at a technical conference. I’m glad they were able to see this particular talk. I think they now have a better understanding for what it is that I have been working on, and the impact it has had on the Java and open source communities. They also have a better appreciation for how important they have been to me along the journey. I hope to eventually take my son to a conference to see me speak, so he can hear me talk about his open source sibling, Eclipse Collections. My daughter and me at JavaOne 2022 wearing Eclipse Collections t-shirts TEAM AND COLLEAGUES DELIVER Many developers have collaborated with me over the years on Eclipse Collections. They have created amazing things that are practical, useful, and solved real problems they encountered in the spaces they were working in. The library represents the collective Java collection needs and contributions from some of most talented developers in the Financial Services industry. I consider myself fortunate to have been able to work with so many of them. The library started out as all great libraries should. It started out as code crafted to solve real problems in an application. Eventually the code was harvested from that application, moved to a shared code space, and made reusable across several applications. The code saw more usage and evolution from contributions from an increasing number of developers. The code was harvested again, moved, and made more reusable a couple more times until it found its final internal destination in Goldman Sachs in the form of a library named Caramel. Caramel would become one of the most reused and contributed to Java libraries inside of Goldman Sachs. Caramel was harvested yet again, made more reusable, and moved to GitHub as GS Collections. GS Collections was the first ever open source project created at Goldman Sachs. Since then Goldman Sachs has open sourced several large internally developed projects on their GitHub account and also at the FinOS Foundation. I am proud to have started the trend of open source project contributions at Goldman Sachs with GS Collections. I have no doubts that this trend will continue, and wish the best for all the GS developers as they continue their collective and individual journeys in contributing to open source. Goldman Sachs booth at JavaOne 2014 w/ the GS Collections story on GS Engineering Portal Folks often credit me with being the first developer to start Goldman Sachs on the path of contributing large internally developed projects to open source. While it is true that I was the driver of this initiative, I was most certainly not alone. I had an army of supporters I collaborated with for five years inside of Goldman Sachs that helped make the open sourcing of GS Collections a reality. There were many developers and senior tech leaders who helped me along the way. I also spent a lot of quality time with lawyers, compliance officers, risk officers, media relations, marketing, and branding folks. I built some great relationships with folks in these areas. Every single one of these folks contributed to the positive end result. Thank you! I told some of this story in person in 2019 at the Open Source Strategy Forum in New York City, in a Fireside Chat with Gab Columbro. The conference was hosted by the FinOS Foundation. The link to the recording of the talk is here. MOVING ON TO GLOBAL COLLABORATION GS Collections would turn out to be just the beginning of the open source journey for Eclipse Collections. Many features would be added in the four years the GS Collections library would be in active development on the Goldman Sachs GitHub account. The code would eventually be forked and moved to the Eclipse Foundation to become Eclipse Collections at the end of 2015. Eclipse Collections has existed as an open source library, hosted at the Eclipse Foundation for eight years now. Congratulations to all involved! Folks outside of Goldman Sachs got to see the end result of the Eclipse Collections move. They didn’t get to see the year plus that many folks worked on getting everything sorted out in order to move GS Collections to the Eclipse Foundation. This was a project on its own. The goal was simple. Open up the library so anyone could contribute by leveraging the experience and open source governance structure at the Eclipse Foundation. The move of GS Collections to the Eclipse Foundation is what made Eclipse Collections a mature and sustainable open source project. GS Collections was free as in beer. Anyone could take the code and library and do what they wanted with it. Eclipse Collections is free as in speech. Any developer can contribute and participate in its evolution so long as they sign the Eclipse Contributor Agreement. Nikhil Nanivadekar and me, the two active Project Leads for Eclipse Collections at Devnexus 2018 A huge thank you to our amazing Eclipse Collections committer team — Nikhil Nanivadekar, Sirisha Pratha, Craig Motlin, Moh Rezaei, and Hiroshi Ito. This committed team of amazing engineers has kept Eclipse Collections evolving at the Eclipse Foundation for the past eight years. They have done the hard and sometimes thankless work of code reviews, pull request merges, monitoring and creating issues, preparing and delivering releases, fixing bugs, and making valued contributions of their own. Eclipse Collections enjoys continued success because of their hard work. Thank you! THE COST AND DELIVERY OF REUSE Reuse is hard. Reuse is expensive. I have told developers over the years it can be two to three times more expensive to develop a reusable component than it is to develop a single use component. When invested in strategically and continuously, reuse can produce enormous returns on investment. This return can come in the form of multiplicative cost savings. No Java developer should ever have to create the missing data structures in the JDK. This is a cost that was created and multiplied by the lack of features in the original twenty five year old Java Collections Framework. You don’t have to wait for the Java Collections Framework to solve the problems you have today, but you have to recognize that you are incurring costs, and that there is a potential cost savings solution available to you in the form of Eclipse Collections. Developers initially use Eclipse Collections because they need to solve some problem that is expensive to implement or maintain on their own, like primitive collections. Over time developers use Eclipse Collections because they want to, because it makes them more productive and happy. Eclipse Collections is one of the best kept, openly shared, Java productivity secrets across all of Financial Services. I’ve done my best to share this secret with folks since GS Collections was first open sourced in 2012. Telling 12 million Java developers about something they are missing is definitely a challenge, and requires a large investment of time raising awareness through blogs, articles, meetups, and conference talks. Eclipse Collections has to compete with all the new shiny things that continually promise to make developers more productive. Eclipse Collections can be every Java developer’s secret weapon, but shhhh, don’t tell everyone if the secret is already saving you money and time. Please don’t tell ChatGPT about it. All we need is for ChatGPT to start writing Java code using Eclipse Collections and saving all Java projects time and money. On second thought… ChatGPT, have at it! Here are five open source projects that benefit from reusing Eclipse Collections. * GitHub - goldmansachs/reladomo: Reladomo is an enterprise grade object-relational mapping framework for Java. * GitHub - finos/legend: The Legend project * GitHub - neo4j/neo4j: Graphs for Everyone * GitHub - vmzakharov/dataframe-ec: A tabular data structure (aka a data frame) based on the Eclipse Collections framework * GitHub - motlin/liftwizard: A collection of utilities for Dropwizard AND NOW, THE TRENDS AND STATS Eclipse Collections continues to evolve and grow. Based on the download trends it looks like the secret of the benefits of using Eclipse Collections is successfully getting out there. A big thank you and congratulations to the entire Eclipse Collections and Java community! MAVEN CENTRAL MONTHLY DOWNLOADS IN 2023 Monthly downloads of eclipse-collections from Maven Central for 2023 QUICK STATS * 367,562 downloads of eclipse-collections in Nov. 2023 * 1,430,085 downloads of eclipse-collections-parent in Nov. 2023 * 2,297 GitHub Stars * 568 GitHub Forks * 1,999 Commits * 107 Contributors QUICK LINKS * GitHub Repo * Kata Repo * Website * Maven Central TECHNICAL CONTENT For folks looking for a technical retrospective, Sirisha Pratha wrote the best one for Eclipse Collections a few years ago. Sirisha links to 31 days of blogs and articles written about Eclipse Collections and GS Collections over the years by various authors. This blog is a great index to technical content about Eclipse Collections. Eclipse Collections — 2020 retrospective There has been a lot of technical content written about Eclipse Collections since the end of 2020. There are Medium search links on the Eclipse Collections GitHub wiki at the following link which include a lot of the more recent content that has been produced. Blogs THANK YOU! Thank you to all of the contributors, committers, users, advocates, and friends of Eclipse Collections. You have helped make this journey worthwhile and enjoyable. I appreciate your support and many contributions over the past twenty years. I hope to see many of you and thank you in person at various technical conferences in the coming years. To my family, I love you very much. Thank you for supporting me and keeping me inspired and motivated while I was spending time working on Eclipse Collections all of these years. Have a safe, happy and healthy Holiday and New Year! I am the creator of and a Committer for the Eclipse Collections OSS project which is managed at the Eclipse Foundation. Eclipse Collections is open for contributions. -------------------------------------------------------------------------------- by Donald Raab at December 18, 2023 12:07 AM Jonas, Maximilian and Philip BUILDING CLOUD-NATIVE (MODELING) TOOLS by Jonas, Maximilian & Philip at December 18, 2023 12:00 AM Are you on the journey to develop a domain-specific (modeling) tool based on modern web technologies? Curious about the latest tech innovations and their seamless integration for cloud efficiency?... The post Building cloud-native (modeling) tools appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at December 18, 2023 12:00 AM DECEMBER 16, 2023 Donald Raab MY JOURNEY TO AND AS A JAVA CHAMPION by Donald Raab at December 16, 2023 10:43 PM Reflecting on my Java Champion story and its evolution after five years. Walking the Path to Balos Beach, Crete with JCrete attendees— July 2016 A MARKER ALONG THE JOURNEY, NOT THE DESTINATION It was truly a great honor for me to be selected as a Java Champion in July 2018. By the time I was selected, there were around 265 Java Champions, out of an estimated 9–12 million Java developers. Tweet announcing several Java Champion selections Today, there are about 380 Java Champions globally. The members of this prestigious group share a lot of knowledge, experience, inspiration, and time with the global Java community. I think of a Java Champion as someone who is a champion for Java, and not just a champion of Java. Giving back to the Java Community in the form of blogs, articles, books, conference talks, JUG meetups, open source contributions, expert group, and committee participation are all important aspects of being a Java Champion. My recipe for success? Passion, Patience, and Persistence. I did not set out with a goal of becoming a Java Champion. I have always wanted to help make Java a better language for developers to develop in. I knew this would be a long road. I started down this path in 2001 when I first began programming in Java full time. It wasn’t until the end of 2017 that I though perhaps I might eventually qualify to be selected into the Java Champions community. I found this blog by Vlad Mihalcea to be both informative and inspiring on my own journey. How to become a Java Champion - Vlad Mihalcea MY JOURNEY AS A MIND MAP Every Java Champion’s story is different. There were thousands of little important moments that edged me closer to being nominated and accepted into the Java Champions community since I started getting involved publicly in the Java Community in 2010. The most important moment was when Leonardo de Moura Rocha Lima nominated me as a Java Champion. I am extremely thankful for the honor Leo bestowed upon me with this nomination. Thank you! Anyone who has read many of my blogs will probably know that I love mind maps. The following is a mind map of all of the things I had been involved with publicly before I was finally selected as a Java Champion in 2018. A visual representation of my public impact and influence before selected as aJava Champion in 2018 TOP FIVE EVENTS ALONG MY JOURNEY The following are the top five events that I believe set the stage for me to eventually be nominated as a Java Champion. 1. Joining the JSR 335 Expert Group — 2011 2. Open Sourcing GS Collections at Goldman Sachs — 2012 3. JavaOne 2014 — Strategy Keynote, first JavaOne talk, Face-2-Face meeting of JCP EC at Twitter Headquarters where I created my Twitter account 4. Moving GS Collections to the Eclipse Foundation to become Eclipse Collections — 2015 5. Attending JCrete — 2016 The events were not only important for the impact I was having, they were formative in me building important long-lasting relationships in the Java Community. MY JOURNEY AS A JAVAONE CONFERENCE BADGE At the time of JavaOne in 2016, I was a speaker, an exhibitor, a JavaOne Alumni, a Java Community Process (JCP) Member, a JSR 335 Expert Group (EG) Member, had helped out with the Adopt-a-JSR effort and was also a member of the JCP Executive Committee (EC). This was my JavaOne 2016 badge. I think it nicely captures the things I was actively doing in the Java Community at the time. THE STUFF THAT DIDN€™T MATTER I’ve had a successful career in Financial Services working at two different banks for the past 22 years. I‘ve been a Managing Director and Tech Fellow at one bank, and am a Managing Director and Distinguished Engineer at another. None of my impressive enterprise scale proprietary work inside of the banks or the corporate titles I accumulated along the way mattered even a tiny bit for my Java Championship nomination and selection. However, the impressive enterprise scale stuff that I created and contributed to open source while at these Financial Services firms on the other hand, definitely made a difference. All of the stuff in the mind map above was public facing. This is something to think about if you are suddenly inspired and motivated to begin a journey to Java Champion. My rule of thumb — If you can’t link to it from a web browser outside of your current company, it doesn’t matter on your journey to Java Champion. FIVE YEARS LATER A lot has happened in the five plus year I have been a member of the Java Champions. I think a comparison of some of the stats from the mind map comparing 2018 and 2023 will summarize how my impact and influence in the Java Community has grown. * Measure — 2018 value â�¡ï¸� 2023 value * Medium Blogs — 29 â�¡ï¸� 174 * Medium Followers — 154 â�¡ï¸� 1,523 * Twitter Followers — 727 â�¡ï¸�ï¸�ï¸� 9,178 * LinkedIn Connections— 1,300 â�¡ï¸� 2,632 * StackOverflow Answers— 120 â�¡ï¸� 197 * StackOverflow Reputation — 3,881 â�¡ï¸� 6,528 * Eclipse Collections (EC) GitHub Stars— 726 â�¡ï¸� 2,284 * Maven Central EC Monthly Downloads — 40,000+ â�¡ï¸� 300,000+ This year marked a new achievement for me. I presented at four Java Conferences in six months. I really felt like a Developer 🥑 for the first time. Two of the conferences I spoke at were in Europe. This was my first time speaking at European Tech Conferences. I hope to continue this trend in 2024 and beyond. MY TOP FIVE IN FIVE If I had to name the top five memorable things that happened to me on my journey the past five years as a Java Champion, they would be as follows. 1. My wife and daughter seeing me speak for the first time at JavaOne 2022 2. Contributing author to “97 Things Every Java Programmer Should Knowâ€� book 3. Eclipse Collections named one of the 25 greatest Java apps ever written in Java Magazine 4. Co-presenting with Rustam Mehmandarov at four Java conferences in 2023 5. Delivering the virtual keynote for IntelliJ IDEA Conf 2022 with Mala Gupta hosting IT€™S A BEGINNING, NOT THE END I hope you find this blog helpful in understanding my journey to becoming a Java Champion. I hope it will inspire some of you to start sharing your experiences, contributions, and knowledge with the developer community as you begin or continue your own journeys, on whichever path you choose. I’ll be out there continuing my own journey as a Java Champion. Look out for new blogs, open source contributions, and talks at JUGs and various global Java conferences. I hope to meet many new excited Java developers over the next few years at Java Conferences and JUG Meetups. Good luck, and good journey! Me enjoying a coffee with my now memorial Twitter coffee cup during the pandemic I am the creator of and committer for the Eclipse Collections OSS project, which is managed at the Eclipse Foundation. Eclipse Collections is open for contributions. -------------------------------------------------------------------------------- by Donald Raab at December 16, 2023 10:43 PM DECEMBER 14, 2023 Lorenzo Bettini ECLIPSE FONTS IN WINDOWS 11 by Lorenzo Bettini at December 14, 2023 09:06 AM This is a quick post about having nice fonts in Eclipse in Windows 11, based on my experience (maybe I had bad luck with the default configurations of Eclipse and/or Windows). When I bought my Acer Aspire Vero, I found Windows 11 installed, and now and then, I’m using Windows 11 (though I’m using Linux […] -------------------------------------------------------------------------------- by Lorenzo Bettini at December 14, 2023 09:06 AM Jonas, Maximilian and Philip THE ECLIPSE THEIA COMMUNITY RELEASE 2023-11 by Jonas, Maximilian & Philip at December 14, 2023 12:00 AM We are happy to announce the fourth Eclipse Theia community release “2023-11”, version 1.43.x! Don’t know about Eclipse Theia, yet? It is the next-generation platform for building... The post The Eclipse Theia Community Release 2023-11 appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at December 14, 2023 12:00 AM DECEMBER 11, 2023 Donald Raab WHY DO YOU WRITE LIKE YOU’RE RUNNING OUT OF TIME? by Donald Raab at December 11, 2023 12:39 AM I learned something important during the pandemic, so I wrote it down. Photo by Milad Fakurian on Unsplash I watched Hamilton the Musical on Disney+ back in July 2020. The musical was simply amazing. I felt like I had been missing this in my life for a very long time. The title of this blog is a line from one of the songs in the play. The line struck me at my core in a way I was not quite prepared for at the time. I write like I am running out of time. The sad reality is that we all have limited time. Alexander Hamilton wrote 51 articles in the Federalist Papers before he died after a duel in his late 40s. His wife Eliza lived until she was 97 years old, and worked for 50 years to raise awareness of all that Hamilton had done. Hamilton ran out of time, but his writing and legacy lives on, due in large part to the efforts of his wife. Over the years, I have tried my best to inspire and motivate others to share their stories through writing. Linked below are some of the blogging accounts I follow on Medium and elsewhere. Some of these folks I have worked with or co-presented with. I have done my best to set a good example by writing and have encouraged many of them to blog over the years. I hope to see them all continue to make writing a regular part of their life. When they write, I read. I share their writings with others so we all can learn. Enjoy! BLOGS * C. V. Guntur * Vladimir Zakharov - Medium * Blog Feed - Graciano.dev * Nikhil Nanivadekar - Medium * Craig Motlin - Medium * Sirisha Pratha - Medium * Emilie Robichaud - Medium * Aqsa Malik - Medium * Alex Goldberg - Medium * Robin Zheng - Medium * Blog * Mala Gupta - Author | The JetBrains Blog * Bhavana | Substack * Helen Scott - Medium * Blog - Trisha Gee * Neha Sardana - Medium * BrianVermeer.nl * Java * @cowtowncoder - Medium * Mary Grygleski - DEV Community Profile * JVM Anatomy Quarks I am the creator of and committer for the Eclipse Collections OSS project, which is managed at the Eclipse Foundation. Eclipse Collections is open for contributions. -------------------------------------------------------------------------------- by Donald Raab at December 11, 2023 12:39 AM Jonas, Maximilian and Philip COLLABORATIVE, TESTABLE AND ACCESSIBLE DIAGRAMS WITH ECLIPSE GLSP by Jonas, Maximilian & Philip at December 11, 2023 12:00 AM Modern web-based diagram editors are not only about shapes and edges; they’re about creating an interactive, collaborative environment that elevates user experience and productivity. With... The post Collaborative, Testable and Accessible diagrams with Eclipse GLSP appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at December 11, 2023 12:00 AM DECEMBER 06, 2023 Webtools News WTP 3.32 RELEASED! December 06, 2023 11:59 PM The Eclipse Web Tools Platform 3.32 has been released! Installation and updates can be performed using the Eclipse IDE 2023-12 Update Site or through any of the related Eclipse Marketplace . Release 3.32 is included in the 2023-12 Eclipse IDE for Enterprise Java and Web Developers , with selected portions also included in several other packages . Adopters can download the R3.32 p2 repository directly and combine it with the necessary dependencies, as well as check the New Help for Old Friends document as a high number of bundles have updated their BREEs in this release, in part due to a large amount of third party bundles seeing their own updates. More news -------------------------------------------------------------------------------- December 06, 2023 11:59 PM DECEMBER 05, 2023 Eclipse Announcements THE ECLIPSE FOUNDATION LAUNCHES THE ECLIPSE DATASPACE WORKING GROUP TO FOSTER GLOBAL INNOVATION IN TRUSTED DATA SHARING by Jacob Harris at December 05, 2023 12:00 PM The Eclipse Foundation Launches the Eclipse Dataspace Working Group to Foster Global Innovation in Trusted Data Sharing Jacob Harris Tue, 2023-12-05 07:00 BRUSSELS – December 5, 2023 – The Eclipse Foundation, one of the world’s largest open source software foundations, today announced the formation of the Eclipse Dataspace Working Group (WG). This new working group is tasked with fostering new dataspaces based on open source technologies via the seamless exchange of data between private companies, governments, academia, and other institutions to create an ecosystem for technology innovation that spans the European Union (EU) and beyond. Dataspaces are federated networks of trusted connections for sharing data to foster information sharing for mutual benefit. They are a critical element in the EU’s strategy for creating a culture of innovation built on privacy and data sovereignty values. To achieve this goal, the Eclipse Dataspace Working Group will provide governance, guidance, and support for open source solutions that enable the development of and participation in dataspaces. The working group does not favour a specific industry or type of organisation. It is fully dedicated to enabling the global adoption of dataspace technologies to foster the creation and operation of trusted data-sharing ecosystems. “Dataspaces support the sharing of federated, sovereign, and trusted data. In doing so, they enable new business models where multiple players can aggregate their data for their own benefit and create a trusted means of data exchange that is decentralised, egalitarian, and secure,” said Mike Milinkovich, executive director of the Eclipse Foundation. “Open source software is the most logical means of building this new reality, and the Eclipse Foundation provides the ideal vendor-neutral ‘code first’ governance model to bring this future to life.” The mission of the Eclipse Dataspace WG is to provide a forum for individuals and organisations to build and promote open source software, specifications, and collaboration models needed to create scalable, industry-ready components based on open standards for dataspaces. Founding members of the working group include a diverse set of organisations from both the public and private spheres, including Amadeus, Fraunhofer, IDSA, iShare, Microsoft, and T-Systems. The Eclipse Dataspace WG will focus on participating in standards development, implementation, and onboarding of existing open source projects, and guiding associated projects in alignment with the overarching goal of supporting a broad ecosystem of interoperable dataspaces. To this end, the working group aims to foster a component-driven model that supports project collections in three distinct groups: * Dataspace Core & Protocols (DCP): DCP focuses on the core protocol specifications and their standardisation. It also provides alignment between the protocol specifications and OSS projects implementing mandatory dataspace functionality. * Dataspace Data Planes & Components (DDPC): DDPC focuses on alignment between projects that implement data plans, which are essential components for dataspaces, as well as additional optional elements that enable advanced dataspace scenarios. These include projects that are not essential to create a viable dataspace but add capabilities that increase the business value of dataspaces. * Dataspace Authority & Management (DAM): DAM focuses on the alignment of tools and workflows to enable the implementation of dataspaces. Its associated projects will support Dataspace Authorities to manage their dataspaces. This includes policy management, member management, and starter kits for dataspace authorities. Overall, the three endeavours aim to create an ecosystem of projects covering diverse aspects of dataspace solutions. Implementations are non-exclusive, and overlapping projects can exist. Protocols will be the unifying aspect between projects, providing minimum viable interoperability. “By nurturing implementations and specifications, we aim to elevate dataspaces as a vital component in future data-driven businesses. Alongside projects like Eclipse Cross Federation Services Components, Asset Administration Shell initiatives, and Tractus-X, the Catena-X reference implementation, we've established a unique ecosystem for Digital Sovereignty under the well-proven governance model of the Eclipse Foundation,” said Michael Plagge, VP, Ecosystem Development at the Eclipse Foundation. The Eclipse Dataspaces WG will also collaborate with existing organisations involved with dataspaces, including the International Data Spaces Association (IDSA), iSHARE Foundation (iSHARE) and Catena-X, among others. Together with the Eclipse Dataspaces WG, these organisations will support one another in a host of ventures, including the formation of new dataspaces initiatives, the creation of Technical Compatibility Kits, and driving consensus around product roadmaps and new capabilities. For any organisation, including enterprises, technology vendors, cloud providers, academic departments, or government organisations, the Eclipse Dataspaces WG is a unique opportunity to help shape the future of technology development in the EU. Membership in the working group not only supports the sustainability of the community but also provides avenues for participating in marketing initiatives and direct engagement with a diverse array of EU organisations building new technology. Discover the numerous benefits and advantages of membership here. Your involvement can help drive the future of dataspaces around the world. Quotes from Eclipse Dataspaces Working Group Member Organizations Amadeus “Dataspaces have the potential to create new dynamics and foster innovation in many domains and could really be game changers to help connect ecosystems across the tourism industry,” says Nikolaus Samberger, Senior Vice-President Engineering at Amadeus. “As a strategic member of the Eclipse Dataspace Working Group, we at Amadeus, are very excited to be launching this collaborative initiative that will no doubt play a key role in the global dataspace ecosystem.” Fraunhofer “For the success of dataspaces, it is required to bring together various stakeholders from different countries, domains, sizes, and interests and provide a neutral place for dialog and collaboration to formulate the joint vision of data sharing,” said Prof. Dr.-Ing Boris Otto, Director, Fraunhofer ISST (Fraunhofer Institute for Software and Systems Engineering). “With the launch of the Eclipse Dataspace Working Group, we now also provide such a place to jointly transfer the vision into technical specification and technologies. Within the EDWG, we can leverage the mutual benefits of open source and the best practices of the Eclipse Foundation.” IDSA “Data spaces have reached a level of maturity and adoption which requires a strong governance framework to build business-relevant services that allow data sharing while maintaining data sovereignty,” said Sebastian Steinbuss, CTO at IDSA. “We are happy to be part of the Eclipse Foundation community in the Dataspace Working Group, to expand the community of data space enthusiasts in the field of Open Source Software.” iSHARE Foundation “Data Sovereignty for all has been the commitment and focus of iSHARE since its start in 2015. This is realised through the comprehensive and stable triangle of legal coverage, participant governance, and technical components. This enables Data Owners to maintain full (legal and technical) control of their data with any service provider or connector,” said Gerard van der Hoeven, Executive Director of the iSHARE Foundation. “Through open-source components for Participant Governance, a consent and authorization registry controlled by Data Owners, and Data Service providers, data spaces based on iSHARE Trust Framework have empowered thousands of businesses to control access to and usage of their data.” “This step to bring the existing open-source technical components for data space governance into the EDSWG is important because it strengthens the collaboration with the open-source communities, with peers like IDSA and Gaia-X, and simplifies the creation of new commercial services, opening more data sources to be governed. But most of all, it enables many more data spaces to take advantage of the fully distributed and interoperable data sovereignty and trust that the non-profit iSHARE framework brings.” Microsoft “We believe dataspaces are a crucial enabler of trusted data sharing across every company, large or small, in every industry,” said Ulrich Homann, Corporate Vice President & Distinguished Architect, Microsoft. “We have the responsibility to come together to support open source software and the associated open specifications that enable autonomy and agency of participants in a dataspace.” T-Systems “We’re thrilled to be part of Eclipse Dataspace Working Group,” said Christoph Gerkum, vice president, Data Intelligence for Dataspace & Data Products, T-Systems International GmbH. “As dataspaces pioneers, Telekom Data Intelligence Hub has shaped the ecosystem with projects like EuroDaT, GAIA-X Future Mobility, and Catena-X. Over +5 years, we’ve dedicated ourselves to open source technologies, community adaptation, and building trust in dataspaces. This collaboration propels us into the future, simplifying dataspaces participation and elevating our collaboration to new heights. We won’t stop until everything is connected and interoperable.” About the Eclipse Foundation The Eclipse Foundation provides our global community of individuals and organisations with a business-friendly environment for open source software collaboration and innovation. We host the Eclipse IDE, Adoptium, Software Defined Vehicle, Jakarta EE, and over 425 open source projects, including runtimes, tools, specifications, and frameworks for cloud and edge applications, IoT, AI, automotive, systems engineering, open processor designs, and many others. Headquartered in Brussels, Belgium, the Eclipse Foundation is an international non-profit association supported by over 350 members. To learn more, follow us on social media @EclipseFdn, LinkedIn or visit eclipse.org. Third-party trademarks mentioned are the property of their respective owners. ### Media contacts: Schwartz Public Relations for the Eclipse Foundation, AISBL (Germany) Gloria Huppert, Franziska Wenzl EclipseFoundation@schwartzpr.de +49 (89) 211 871 - 70 / - 58 Nichols Communications for the Eclipse Foundation, AISBL Jay Nichols jay@nicholscomm.com +1 408-772-1551 514 Media Ltd for the Eclipse Foundation, AISBL (France, Italy, Spain) Benoit Simoneau benoit@514-media.com M: +44 (0) 7891 920 370 Image Tags dataspaces Dataspaces Gaia-X -------------------------------------------------------------------------------- by Jacob Harris at December 05, 2023 12:00 PM Jonas, Maximilian and Philip ECLIPSE THEIA 1.44 RELEASE: NEWS AND NOTEWORTHY by Jonas, Maximilian & Philip at December 05, 2023 12:00 AM We are happy to announce the Eclipse Theia 1.44 release! The release contains 37 merged pull requests and we welcome three new contributors. In this article we will highlight some selected... The post Eclipse Theia 1.44 Release: News and Noteworthy appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at December 05, 2023 12:00 AM DECEMBER 04, 2023 Sharon Corbett STARTING YOUR COLLABORATION JOURNEY AT THE ECLIPSE FOUNDATION by Sharon Corbett at December 04, 2023 06:38 PM Starting Your Collaboration Journey at the Eclipse Foundation Whether you intend on contributing to Eclipse technologies that are important to your product strategy, or simply want to explore a specific innovation area with like-minded organisations, the Eclipse Foundation is the open source home for industry collaboration. But how do you get started? The first step is to identify your goals and areas of interest. Which Eclipse technologies does your organisation find valuable? What kinds of organisations are you looking to collaborate with? After answering these questions, you can determine the scope of your intended collaboration. Once you’ve decided which of our two collaboration models is right for you, it’s time to explore your options. The Eclipse Foundation hosts 19 working groups and 3 interest groups focused on runtimes, tools, and frameworks for cloud and edge applications, IoT, AI, automotive, and beyond. Members are encouraged to explore our current showcase and see which existing collaborations align with their goals. All Eclipse Foundation members are eligible to participate in industry collaborations. To contact us about joining a working group, you can complete the membership form on the website of your working group of interest, or the general Eclipse Foundation membership form. From there, our membership team will guide you through the process. For interest groups, the process is simpler. Members can simply announce their intention to join on the interest group’s mailing list. STARTING YOUR OWN COLLABORATION To begin the process of establishing a working group, you first need to contact our business development team to determine the feasibility of establishing a formal working group. Upon determination, the Eclipse Foundation will work with the lead organisation(s) to define the working group's vision and scope, formalise agreements, and identify potential members. A key outcome of this stage is the draft Working Group Charter, a framework outlining the vision, scope, technical roadmap, and leadership structure of the working group. All five stages of the working group lifecycle are visualised below: To learn more about the different stages of creating a new working group, review the Eclipse Foundation Working Group Process. To create a new interest group, existing members can submit a proposal on our website. If your organisation is not already a member, you must first join the Eclipse Foundation, and then follow the Eclipse Foundation Interest Group Process. There must be at least three member organisations participating, and members must designate at least one interest group lead. Unlike formal working groups, no additional fees are required to participate. Once your collaboration is underway, you’ll be able to benefit from the vendor-neutral governance and collaboration management provided by the Eclipse Foundation. Visit eclipse.org/collaborations to learn more about starting your collaboration journey. Sharon Corbett Mon, 2023-12-04 13:38 -------------------------------------------------------------------------------- by Sharon Corbett at December 04, 2023 06:38 PM Jonas, Maximilian and Philip DISCOVER THE REAL-WORLD POWER OF OPEN SOURCE AND COLLABORATION by Jonas, Maximilian & Philip at December 04, 2023 12:00 AM Open source and collaboration are buzzwords in every industry, but what does it mean in the real world? Who are the people behind these projects, and how are they funded? What motivates stakeholders... The post Discover the Real-World Power of Open Source and Collaboration appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at December 04, 2023 12:00 AM DECEMBER 01, 2023 Donald Raab INFECTIOUS ENTHUSIASM by Donald Raab at December 01, 2023 03:54 PM Smiles change the world. Photo by Spencer Davis on Unsplash I was once told by a partner at a large financial services institution that I have “infectious enthusiasm.” When I first heard this, I was confused. I thought it might have been a compliment, but also thought maybe it was feedback that I suffered from some incurable disease. Years later, I’m pretty sure I know what it means. It is both. The more time you spend interacting with me (virtually or in person), the more likely the possibility you will wind up discovering, learning, and doing something that may have never occurred to you before. Many people are immune to my brand of enthusiasm, while others develop extreme symptoms. Here are a list of symptoms that you may exhibit over time, the longer you interact with me. ✅ You have an Eclipse Collections sticker on your laptop ✅ You have started to learn Java ✅ You have learned how to use lambdas in Java ✅ You have started to learn Eclipse Collections ✅ You have read some Smalltalk code ✅ You know who Alan Kay is ✅ You have read one of my Medium blogs ✅ You have followed me on social media ✅ You have attended a Java User Group Meetup ✅ You have completed an Eclipse Collections Kata ✅ You use Eclipse Collections in one of your projects ✅ You have developed a Method Reference preference ✅ You have written your first blog ✅ You have attended your first technical conference ✅ You have taught your first code kata ✅ You have started contributing to open source ✅ You are blogging and posting on social media regularly ✅ You have presented at a technical conference ✅ You have developed your own brand of “infectious enthusiasm” ✅ You have given an Eclipse Collections sticker back to me ✅ You have sung your first song at a karaoke outing See how many of these symptoms you exhibit over time. If you’re reading this blog, you’re already developing at least one. Over the past two decades, I have accumulated stories of developers I have inspired and influenced in some way. Some of these folks have gone on to do some great things and have developed their own brands of infectious enthusiasm. Many developers have left a lasting impression on me, even if it was only through a single authentic conversation. Every bit of feedback I receive on my journey goes a long way to keeping me motivated, energized, and on a path of continuous improvement. A decade ago, I learned an important lesson from a developer I barely knew. The experience was truly humbling and inspiring for me. The developer dropped by my office one evening and said, “Don, I wanted to let you know you are my hero.” This was a first for me. I have many heroes. I‘ve never thought of myself as someone else’s hero. I sat there in my office chair blushing, not really knowing how to respond. After a few seconds, I gained enough composure to say something like “Take my printer, please.” This was a response I had learned from a former manager who would say this to express gratitude anytime someone would compliment him. We both laughed. The developer thanked me for all that I did to make contributing to open source a possibility at the large financial services institution we both worked for at the time. Then he went back to his desk and continued coding. This interaction helped me understand how important it is to tell others in the most authentic way possible the positive impact they are having. This developer inspired me more than he may realize. This memory continues to be a source of inspiration and positive energy for me a decade later. I hope to inspire and motivate developers to continually improve their craft and do things they would have previously thought were beyond their capabilities. These are some of the habits I try to pass on to other developers. * Follow a path of continuous learning * Socialize their work and share what they learn * Write high quality code and tests * Teach others to learn * Grow communities of excellence * Contribute to open source * Build their brand through blogs and talks * Inspire and motivate others * Celebrate wins, no matter how small In closing, I want to extend my deepest gratitude to folks in DevRel roles and all the people that selflessly share their knowledge for the best of the community. We need your infectious enthusiasm to help improve our craft. Many of you have inspired me and motivated me with your seemingly endless energy and talent. Your infectious enthusiasm has rubbed off on me, and I will continue to make sure I pay it forward with as many folks as I can. Thank you! I am the creator of and committer for the Eclipse Collections OSS project, which is managed at the Eclipse Foundation. Eclipse Collections is open for contributions. -------------------------------------------------------------------------------- by Donald Raab at December 01, 2023 03:54 PM NOVEMBER 30, 2023 Jonas, Maximilian and Philip CDT CLOUD BLUEPRINT: MEMORY INSPECTOR by Jonas, Maximilian & Philip at November 30, 2023 12:00 AM When it comes to C/C++ development, especially in the world of embedded development, in-depth memory analysis is often key to efficient and effective programming. CDT Cloud Blueprint, an open and... The post CDT Cloud Blueprint: Memory Inspector appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at November 30, 2023 12:00 AM NOVEMBER 29, 2023 Eclipse Announcements ECLIPSE MOSQUITTO SECURITY AUDIT HAS BEEN COMPLETED by Jacob Harris at November 29, 2023 02:04 PM Eclipse Mosquitto Security Audit Has Been Completed Jacob Harris Wed, 2023-11-29 09:04 We’re excited to announce that the Eclipse Foundation has successfully conducted a security audit for Eclipse Mosquitto, marking our fourth project audit this year. URL https://blogs.eclipse.org/post/mika%C3%ABl-barbero/eclipse-mosquitto-security-a… -------------------------------------------------------------------------------- by Jacob Harris at November 29, 2023 02:04 PM NOVEMBER 28, 2023 John Kellerman ECLIPSE CLOUD DEVTOOLS CONTRIBUTOR AWARD:TOBIAS ORTMAYR FOR IMPROVING THE PERFORMANCE OF THEIA by John Kellerman at November 28, 2023 09:07 PM Eclipse Cloud DevTools Contributor Award:Tobias Ortmayr for improving the performance of Theia The Eclipse Cloud Developer Tools contributor award for December goes to Tobias Ortmayr at EclipseSource for his outstanding and transformative contributions to improving the performance of Eclipse Theia. Tobias Ortmayr continues to exemplify exceptional proficiency and commitment in his instrumental work on Eclipse Theia. His work on significant performance enhancements is remarkable for its immediate effects. However, it also enables observability of the ongoing progress:. https://eclipse-theia.github.io/theia-e2e-test-suite/performance/ (see also screenshot below). This work and progress resonates and is appreciated by the Eclipse Theia community. Furthermore, Tobias, along with Philip Langer, has led community discussions on performance, bringing four different vendors to address this critical issue: STMicroelectronics, Ericsson, EclipseSource, and Typefox. See also Matthew Khouzam’s talk at TheiaCon about “Theia Observability and Lessons Learned for your App” for more details. A notable achievement under Tobias's leadership is the optimization of the frontend-backend communication by a factor of 30 and the reduction of start-up times for Theia-based IDEs by an impressive 60%. In a cloud-centric design like Theia, even marginal reductions in docker spin-up times and communication improvements, when scaled over thousands of instances, translate into substantial savings in developer time. In the words of Will Rogers, "you never get a second chance to make a first impression." In this vein, Tobias has not only enhanced the initial experience of Theia, but continues to refine it persistently. For these reasons and more, we congratulate Tobias Ortmayr. His contributions have significantly improved the performance of Eclipse Theia and, equally as important, enable transparency and continued progress. Well done Tobias! This Eclipse Cloud DevTools contributor award is sponsored by the Eclipse Cloud DevTools Working Group. The working group provides a vendor-neutral ecosystem of open source projects focused on defining, implementing and promoting best-in-class web and cloud-based development tools. It is hosted at the Eclipse Foundation, current members of the group include AMD, Arm, EclipseSource, Ericsson, Obeo, RedHat, Renesas, STMicroelectronics and TypeFox. John Kellerman Tue, 2023-11-28 16:07 -------------------------------------------------------------------------------- by John Kellerman at November 28, 2023 09:07 PM Mikael Barbero ECLIPSE MOSQUITTO SECURITY AUDIT HAS BEEN COMPLETED November 28, 2023 02:00 PM We’re excited to announce that the Eclipse Foundation has successfully conducted a security audit for Eclipse Mosquitto, marking our fourth project audit this year. To enhance security, all Mosquitto users are urged to upgrade to the latest available version. All issues identified by the audit have been fixed in the source code. An Eclipse IoT project, Eclipse Mosquitto provides a lightweight server implementation of the MQTT protocol that is suitable for all situations, from powerful servers to embedded and low power machines. Highly portable and compatible with numerous platforms, Mosquitto is a popular choice for embedded products. Threat Model Since the MQTT network could potentially be accessible to attackers, correct handling of messages in a broker and correct cryptographic operations are important to the security of the entire network. The audit revealed a few issues in the password implementation and Dynamic Security plugin. This shows that independent review can be useful for all projects, even mature ones. Full Report This open source project security audit was completed by Trail of Bits, an independent auditor. Like our previous three audits, this initiative was done in collaboration with the Open Source Technology Improvement Fund (OSTIF) and was made possible thanks to the funding the Foundation received from the Alpha-Omega Project. GET INVOLVED * Download Eclipse Mosquitto, learn how you can contribute to the project, and review their security page. * Learn more about the Eclipse Cyber Risk Initiative, and how your organization can join the effort to strengthen the open source supply chain. Please subscribe to the ECRI mailing list to join the initiative, or to follow its progress. -------------------------------------------------------------------------------- November 28, 2023 02:00 PM NOVEMBER 27, 2023 Donald Raab DON’T MAKE ME SCROLL by Donald Raab at November 27, 2023 04:17 PM I want to read your code… not travel through it. Photo by Taylor Flowe on Unsplash I want code for a single Java method to fit on one screen. I do not want to scroll vertically or horizontally when I am looking at a single method. Making me scroll is an opportunity for me to lose focus and context and have to waste time scrolling back and forth. I use big fonts on my laptop. I can switch to smaller fonts but it’s harder on my eyes. My metric for a good Java method is less than ten Java statements, and less than thirty lines of text with method signature and curly braces included. Code should not have to scroll horizontally to achieve this. Horizontal scrolling is much worse than vertical scrolling. Nested generics in Java can be challenging. Maybe add missing types to simplify generics. Requiring scrolling in both directions will slow comprehension down. Thank you for reading this brief message, and for not making me scroll. I am the creator of and committer for the Eclipse Collections OSS project, which is managed at the Eclipse Foundation. Eclipse Collections is open for contributions. -------------------------------------------------------------------------------- by Donald Raab at November 27, 2023 04:17 PM Donald Raab ZOMBIELAND IMPLEMENTATION PATTERN: DOUBLE TAP by Donald Raab at November 27, 2023 02:45 AM Photo by julien Tromeur on Unsplash Have you seen the movie Zombieland? There are rules for surviving in Zombieland. Rule number two is called Double Tap. When a zombie is attacking you, don’t get stingy with bullets. Shoot twice! I’ve seen the Double Tap pattern used occasionally with Eclipse Collections over the years. Here’s one example of a Double Tap. @Test public void doubleTapLazy() { ImmutableList<String> list = Lists.immutable.with("One", "Two", "Three"); list.asLazy() .tap(System.out::println) .collect(String::toLowerCase) .tap(System.out::println) .collect(String::toUpperCase) .forEach(System.out::println); } In this code, I iterate lazily over a an ImmutableList of String and use tap twice. I use tap to print out each element, and then again to print each element after it is converted to lowercase. I use the tap method twice to see the before and after transformation state in the pipeline. Double Tap! Then I use forEach to print out the element converted to uppercase. The output for this code is as follows: One one ONE Two two TWO Three three THREE The lazy tap method is very useful if you want to log or perform some operation with intermediate results over a series of fluent calls. The method tap on LazyIterable is equivalent to the method peek on Java Stream. Now I will change this code to iterate eagerly by removing the call to asLazy. @Test public void doubleTapEager() { ImmutableList<String> list = Lists.immutable.with("One", "Two", "Three"); list.tap(System.out::println) .collect(String::toLowerCase) .tap(System.out::println) .collect(String::toUpperCase) .forEach(System.out::println); } The output for this code is as follows: One Two Three one two three ONE TWO THREE The output still contains the same number of elements, but the order of execution is different. The method named tap defined on the RichIterable interface behaves like forEach when executed eagerly on a collection like ImmutableList. The tap method has overrides with Covariant Return Types throughout the Eclipse Collections hierarchy returning the most specific types possible. This is why when I removed the call to asLazy, the first call to tap prints out all of the original elements in the list. The second call to tap prints all of the elements converted to lowercase. Then the call to forEach prints each element converted to uppercase with a new line after. I include an example of a Triple Tap in the following blog when comparing Eager vs. Lazy to help folks understand the differences between the two iteration styles. The 4 am Jamestown-Scotland ferry and other optimization strategies I hope this blog and the Double Tap analogy helps you understand and remember the tap method in Eclipse Collections. Perhaps it will prove useful the next time you need to accomplish something in an intermediate series of fluent calls. Thanks for reading! I am the creator of and committer for the Eclipse Collections OSS project, which is managed at the Eclipse Foundation. Eclipse Collections is open for contributions. STACKADEMIC Thank you for reading until the end. Before you go: * Please consider clapping and following the writer! ðŸ‘� * Follow us on Twitter(X), LinkedIn, and YouTube. * Visit Stackademic.com to find out more about how we are democratizing free programming education around the world. -------------------------------------------------------------------------------- Zombieland Implementation Pattern: Double Tap was originally published in Stackademic on Medium, where people are continuing the conversation by highlighting and responding to this story. -------------------------------------------------------------------------------- by Donald Raab at November 27, 2023 02:45 AM Jonas, Maximilian and Philip WEB-BASED TOOLS AND IDES: ACCOMPLISHMENTS AND OPPORTUNITIES by Jonas, Maximilian & Philip at November 27, 2023 12:00 AM The landscape of tool creation projects has been significantly reshaped by the advent and rise of web-based tools and integrated development environments (IDEs). This field, though relatively new, has... The post Web-based Tools and IDEs: Accomplishments and Opportunities appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at November 27, 2023 12:00 AM NOVEMBER 22, 2023 Jonas, Maximilian and Philip HOW TO GET VISIBLE AS A THEIA ADOPTER AND CONTRIBUTOR by Jonas, Maximilian & Philip at November 22, 2023 12:00 AM In the rapidly evolving landscape of technology, visibility and collaboration are key drivers of success. For companies leveraging Eclipse Theia, the open-source cloud & desktop IDE platform,... The post How to get visible as a Theia adopter and contributor appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at November 22, 2023 12:00 AM NOVEMBER 21, 2023 Eclipse Announcements INTRODUCING ECLIPSE THREADX by Jacob Harris at November 21, 2023 05:28 PM Introducing Eclipse ThreadX Jacob Harris Tue, 2023-11-21 12:28 Eclipse Foundation executive director Mike Milinkovich explores why Eclipse ThreadX is exactly what the embedded real-time software market needs, and shares what’s next for the project in his new blog. URL https://blogs.eclipse.org/post/mike-milinkovich/introducing-eclipse-threadx Tags open source -------------------------------------------------------------------------------- by Jacob Harris at November 21, 2023 05:28 PM Mike Milinkovich INTRODUCING ECLIPSE THREADX by Mike Milinkovich at November 21, 2023 04:00 PM TL;DR – GET ENGAGED! * Contact us to learn how to become part of the Eclipse ThreadX Interest Group * Contribute to the project and join the ThreadX developer mailing list * Stay connected by joining the general ThreadX mailing list * Watch for updates at threadx.io WHAT WE’RE ANNOUNCING Every once in a while, a new open source initiative comes along which is truly an industry changing event. Today, Microsoft announced that Azure RTOS, including all of its components, is going to be made available as the Eclipse ThreadX open source project. This new project is exactly what the highly fragmented embedded software market has needed for a very long time. ThreadX is going to be the world’s first open source real time operating system which is: 1. Mature and scalable technology. ThreadX has been developed for over 20 years, is currently running on over 12 billion devices around the world, and is highly regarded as a high-performance, highly deterministic, real time operating system. 2. Made available under a permissive open source license. ThreadX is going to be licensed under the MIT license, which provides highly permissive license terms for users and adopters. 3. Governed under a vendor-neutral open source foundation. ThreadX is going to be governed by the Eclipse Foundation and its development process. This will guarantee a vendor-neutral governance model to manage the evolution and sustainability of ThreadX for the benefit of the entire industry. AND 4. Certified for functional safety and security. ThreadX is IEC 61508, IEC 62304, ISO 26262, and EN 50128 conformance certified by SGS-TÜV Saar. ThreadX has also achieved EAL4+ Common Criteria security certification. These certifications are a big differentiator, and are unprecedented in the industry. They are a game changer, as there are currently no open source RTOS’s which have them. While there are other open source RTOS’s out there, none have all of the four attributes listed above. We are optimistic that, because of these attributes, ThreadX is going to rapidly expand its adoption in a wide range of use cases including aerospace, automotive, IoT, medical, transportation, automation, and consumer wearables. NEXT STEPS In addition to the project, we are also announcing the creation of an interest group focused on developing an industry-supported, sustainable funding model for ThreadX. We are excited that AMD, Cypherbridge, Microsoft, NXP, PX5, Renesas, ST Microelectronics, Silicon Labs, and Witekio (an Avnet company) have all committed to supporting this conversation. We highly encourage every company with an interest in embedded technology to join to help create the future. The ThreadX interest group’s sole focus will be on establishing a working group focused on the following: 1. Consolidate the project: There is going to be a great deal of focus on getting ThreadX moved under Eclipse Foundation governance as quickly as possible. This will involve transferring and re-licensing the code and documentation, and assigning the trademarks over the next few weeks. In parallel, we are looking for developers who have experience with the ThreadX code base to get involved as key resources from Cypherbridge, PX5, and Witekio have already done. The intent is to have the first release of ThreadX under Eclipse Foundation governance completed by the end of January 2024. 2. Preserve the certifications: As I mentioned above, the safety and security certifications are a key differentiator for ThreadX. Maintaining those certifications while under open source governance is going to be a key factor in the evolution of ThreadX as an open source project. Fortunately, the Eclipse Foundation has been thinking about and staffing for this capability for a long time as our IoT and Software Defined Vehicle communities have similar requirements. Our intent is to develop best practices for the ThreadX community and, if required, modify and enhance our Eclipse Foundation Development Process to support the additional process requirements necessary to support safety and security. The documentation which will enable downstream adopters of ThreadX to certify their products will be made available under open licenses. This will significantly shorten the lifecycle of safety-certified products based on Eclipse ThreadX. 3. Build the community: ThreadX represents an amazing opportunity to build an open source embedded software developer community. There will be a great deal of focus on nurturing new contributions, driving adoption via developer advocacy, and creating cross-pollination with our other communities within the Eclipse Foundation such as IoT and SDV, all while preserving the processes required for the certifications which differentiate ThreadX. 4. Promote the brand: Returning to the original ThreadX name is purposefully intended to assure the many current adopters of this technology that this is and will remain the RTOS that they trust for their products. The new mission will be to associate the ThreadX brand with vendor-neutral governance, communicate clear market positioning, and establish compatibility programs that will provide value to current and future adopters. 5. Grow the ecosystem: With over 10 billion devices deployed using ThreadX, it is clear that this is an important and mature technology. To ensure a sustainable future for ThreadX we need to obtain the support, participation, and contributions of all ecosystem participants: silicon/SBC manufacturers, embedded system integrators, and tool vendors. We highly encourage every company with an interest in embedded technology to join the interest group to help define and secure the future of ThreadX. Eclipse ThreadX presents the industry with a game-changing opportunity. Having a performant, mature, safety and security certified, permissively-licensed, open source RTOS under vendor-neutral governance will enable new business and product opportunities around the world. We are very excited to work with the community to make ThreadX a huge success. -------------------------------------------------------------------------------- by Mike Milinkovich at November 21, 2023 04:00 PM NOVEMBER 17, 2023 Jonas, Maximilian and Philip CDT CLOUD BLUEPRINT: DETACHING VIEWS by Jonas, Maximilian & Philip at November 17, 2023 12:00 AM Looking for a modern, web-based IDE for C/C++ development or aiming to develop a custom C/C++ tool? Dive in! In this article we will demonstrate advanced workbench layouting capabilities of CDT Cloud... The post CDT Cloud Blueprint: Detaching Views appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at November 17, 2023 12:00 AM NOVEMBER 10, 2023 Marc Nuri ECLIPSE JKUBE 1.15 IS NOW AVAILABLE! November 10, 2023 04:00 PM Original post On behalf of the Eclipse JKube team and everyone who has contributed, I'm happy to announce that Eclipse JKube 1.15.0 has been released and is now available from Maven Central ğŸ�‰. Thanks to all of you who have contributed with issue reports, pull requests, feedback, and spreading the word with blogs, videos, comments, and so on. We really appreciate your help, keep it up! WHAT'S NEW? Without further ado, let's have a look at the most significant updates: * Support for Spring Boot 3 native image * Helm values.yaml fragments * Updated base images * ğŸ�› Many other bug-fixes and minor improvements SUPPORT FOR SPRING BOOT 3 NATIVE IMAGE Starting with this release, JKube automatically detects Spring Boot 3 native image build artifacts and generates a suitable container image. This feature is available for both Maven and Gradle builds. If you're using Gradle, it will be as simple as running the following commands: gradle nativeCompile gradle k8sBuild Or in case of Maven: mvn -Pnative native:compile mvn k8s:build HELM VALUES.YAML FRAGMENTS You can now provide a values.helm.yaml file in the src/main/jkube directory. JKube will automatically merge the contents of this file with the generated values.yaml file during the Helm chart generation. The fields from the fragment will be merged with those that can be provided as parameters in the build.gradle or pom.xml plugin configuration section. USING THIS RELEASE If your project is based on Maven, you just need to add the Kubernetes Maven plugin or the OpenShift Maven plugin to your plugin dependencies: <plugin> <groupId>org.eclipse.jkube</groupId> <artifactId>kubernetes-maven-plugin</artifactId> <version>1.15.0</version> </plugin> If your project is based on Gradle, you just need to add the Kubernetes Gradle plugin or the OpenShift Gradle plugin to your plugin dependencies: plugins { id 'org.eclipse.jkube.kubernetes' version '1.15.0' } HOW CAN YOU HELP? If you're interested in helping out and are a first-time contributor, check out the "first-timers-only" tag in the issue repository. We've tagged extremely easy issues so that you can get started contributing to Open Source and the Eclipse organization. If you are a more experienced developer or have already contributed to JKube, check the "help wanted" tag. We're also excited to read articles and posts mentioning our project and sharing the user experience. Feedback is the only way to improve. Project Page | GitHub | Issues | Gitter | Mailing list | Stack Overflow -------------------------------------------------------------------------------- November 10, 2023 04:00 PM NOVEMBER 08, 2023 John Kellerman ECLIPSE CLOUD DEVTOOLS CONTRIBUTOR AWARD: DOMINIK BORK FOR BRIDGING ACADEMIA, OPEN SOURCE, AND INDUSTRY by John Kellerman at November 08, 2023 04:24 PM Eclipse Cloud DevTools Contributor Award: Dominik Bork for bridging academia, open source, and industry The Eclipse Cloud Developer Tools contributor award for this month is proudly presented to Dr. Dominik Bork, Assistant Professor for Business Systems Engineering at TU Wien, in recognition of his remarkable dedication and innovative contributions to the Eclipse Cloud DevTools technologies. Dominik has been instrumental in the Cloud DevTools community for bridging academia, open-source software and industry. His commitment ensures that the innovative work from research projects and student theses doesn't just end with an excellent publication, but evolves into valuable contributions to open-source projects, such as those within the Eclipse Cloud DevTools ecosystem. It's his forward-thinking approach that enables research results to have a lasting impact and utility beyond the academic sphere, allowing open-source projects and their industrial adopters to benefit from novel research results. Examples of Dominik’s efforts: * His guidance of students in developing innovative extensions to Eclipse Cloud DevTools technologies, particularly for Eclipse GLSP and EMF.cloud, has led to important improvements, such as enhanced accessibility for more inclusive diagram editing with GLSP, real-time collaborative modeling via VS Code Live Share, and a robust end-to-end testing framework for GLSP diagram editors. * With the inception and development of bigUML (see screenshot below) and an ER modeling tool for VS Code, he is rethinking the concepts of modeling tools based on Eclipse Cloud DevTools technologies, and feeds the lessons learned from development back to the open-source community. * He is playing a pivotal role in incorporating Eclipse Cloud DevTools technologies into his academic curriculum and research publications, significantly contributing to their adoption and enhancement. BigUML based on Eclipse Theia and GLSP For these reasons and many more, we extend our heartfelt congratulations to Dr. Dominik Bork. Your contributions significantly enhance the Eclipse Cloud DevTools landscape, and we are grateful for your passionate involvement. This Eclipse Cloud DevTools contributor award is sponsored by EclipseSource, providing consulting and implementation services for web-based tools, Eclipse GLSP, Eclipse Theia, and VS Code. John Kellerman Wed, 2023-11-08 11:24 -------------------------------------------------------------------------------- by John Kellerman at November 08, 2023 04:24 PM NOVEMBER 07, 2023 Sharon Corbett WHICH ECLIPSE FOUNDATION COLLABORATION MODEL IS BEST FOR YOU? THREE QUESTIONS TO ASK by Sharon Corbett at November 07, 2023 05:00 PM Which Eclipse Foundation Collaboration Model Is Best for You? Three Questions to Ask The Eclipse Foundation gives members two options for collaborating with industry peers: interest groups and working groups. If you are unsure about which collaboration model is right for you and your organisation, here are three key questions you should consider to help determine your next steps. DO YOU NEED A VENDOR-NEUTRAL SPACE TO COLLABORATE? If you’re an Eclipse Foundation member, we can assume the answer is yes. Both working groups and interest groups enable organisations to collaborate under a vendor-neutral governance model. With interest groups, members can come together to share a common interest in a topic or domain in a vendor-neutral manner based on the Eclipse Foundation’s overall governance structure, including its intellectual property and antitrust policies. Unlike working groups, there are no formal participation agreements, budgets, or committees. The governance structure is informal, with most actions being taken collegially by participants in the interest group. ARE YOU PLANNING ON DEVELOPING SPECIFICATIONS? Interest groups are free to develop resources like documents, white papers, architectures, blueprints, diagrams and presentations. However, they must not develop software, software documentation, nor specifications. That’s why any organisation looking to collaborate with industry peers by developing specifications would need to move to a formal working group model, meet the associated criteria and provide the necessary funding to do so. Specifications are created and maintained by specification projects, and specification projects need to be aligned with a working group. ARE YOU INTERESTED IN GROWING YOUR COMMUNITY AND HAVE MORE DEVELOPERS CONTRIBUTE TO YOUR PROJECTS? The Eclipse Foundation's ecosystem development and marketing programs promote community and membership growth, drive awareness and discoverability of projects and collaborations, and increase the commercial adoption of Eclipse technologies. These services, including content development, news and media assistance, in-person and online event planning, and creative design support, are exclusively offered to working groups. Since working groups are most effective when a diverse group of organisations get involved and collaborate, our ecosystem development and marketing services are available to help grow awareness and participation in these collaborations and the projects they are involved in. To summarise, Eclipse Foundation members can join interest groups to collaborate across organisational boundaries in a vendor-neutral structure to solve industry problems and to drive shared innovation. But if your organisation intends on developing and promoting a new compatibility and trademark brand with industry peers, developing open source specifications, or contributing resources to join business cases, then a formal working group would need to be created. To learn more about our industry collaborations and our current showcase, please visit eclipse.org/collaborations, and contact us if you are interested in joining and/or forming a new industry collaboration. Sharon Corbett Tue, 2023-11-07 12:00 -------------------------------------------------------------------------------- by Sharon Corbett at November 07, 2023 05:00 PM Clark Roundy FROM AI TO URBAN TRANSFORMATION: INSIGHTS FROM THE 2023 IOT & EDGE DEVELOPER SURVEY REPORT by Clark Roundy at November 07, 2023 03:34 PM From AI to Urban Transformation: Insights from the 2023 IoT & Edge Developer Survey Report The ninth edition of the Eclipse Foundation’s IoT & Edge Developer Survey Report is a window into the ever-evolving IoT and edge computing landscape, where open source technologies are playing a pivotal role in solving real-world challenges across diverse industries. And guess what? The 2023 findings reveal that there is even more innovation happening than ever before, with development activities increasing across all sectors when compared to our 2022 survey. Industrial automation and agriculture are once again the two leading market segments, but smart buildings and cities are emerging as dark horses in this race, indicating a groundswell of interest in building automation, connected/smart cities, energy management, and transportation. The momentum is undeniable, with a future that holds boundless possibilities for urban transformation. One of the standout findings is that artificial intelligence continues to be the shining star among edge computing workloads. As AI investment grows, this finding is not surprising. What’s interesting, however, is that control logic has nudged ahead of AI to become the most common edge workload for IoT solutions utilizing edge gateways and/or edge nodes. It's a shift that hints at the nuanced requirements of diverse IoT applications. This year’s global survey drew insights from over 1000 developers, committers, architects, and decision-makers across a spectrum of industries. Thank you to everyone who took the time to participate and contribute to our comprehensive understanding of the IoT and edge computing landscape. Your input has proven invaluable. These findings aren’t just for show. They also unveil fresh opportunities for businesses in the IoT and edge computing domain. With MQTT emerging as the preferred IIoT communication protocol for nearly half of the survey participants, companies might want to give it a closer look. Moreover, the void created by the exit of several IoT middleware providers in 2022, like Google Cloud IoT Platform, Bosch IoT Suite, IBM Watson IoT, and SAP Internet of Things, presents a substantial opportunity. While nearly half of the participants have relied on one of these middleware offerings, only 12% have migrated to a new one. This underscores the untapped potential for middleware innovation in the ever-evolving IoT and edge computing space. This is just a taste of what you will find in the 2023 survey report. We encourage you to dive deeper into the insights and recommendations we’ve shared. For a complete spectrum of our findings and insightful recommendations, we invite you to download the complete 2023 IoT & Edge Developer Survey Report. To connect with the vibrant Eclipse IoT community and stay updated on the latest developments in the world of IoT and edge computing, be sure to visit iot.eclipse.org. Thank you for joining us in this journey of discovery and innovation. The future of IoT and edge computing holds immense promise, and together, we're shaping it. Download the report and stay connected – the adventure continues. Clark Roundy Tue, 2023-11-07 10:34 -------------------------------------------------------------------------------- by Clark Roundy at November 07, 2023 03:34 PM Eclipse Announcements THE ECLIPSE FOUNDATION RELEASES 2023 IOT & EDGE DEVELOPER SURVEY RESULTS by Jacob Harris at November 07, 2023 10:50 AM The Eclipse Foundation Releases 2023 IoT & Edge Developer Survey Results Jacob Harris Tue, 2023-11-07 05:50 BRUSSELS – November 7, 2023 – The Eclipse Foundation, one of the world’s largest open source software foundations, today announced results from its 2023 IoT & Edge Developer Survey. Administered by the Eclipse IoT Working Group and the Eclipse Sparkplug Working Group, the survey provides essential insights into IoT and edge computing industry landscapes, challenges developers face, and the opportunities for enterprise stakeholders in the IoT & edge open source ecosystem. Now in its ninth year, the survey is the IoT & edge industry’s leading technical survey. “This year’s results yielded some very interesting trends, particularly those related to real-world use cases and technology choices,” said Mike Milinkovich, executive director of the Eclipse Foundation. “What’s clear is that developers are actively building production solutions leveraging open source technologies to tackle today’s IoT challenges across industrial, agricultural, and municipal settings.” The online survey was conducted from April 4, 2023, to July 5, 2023, during which 1,037 global developers, committers, architects, and decision-makers from a broad set of industries and organisations participated. Key findings include: * Development is increasing across all IoT sectors. Industrial automation is once again the top area of focus (33%, up from 22%), followed by agriculture (29 %, up from 23%), building automation, energy management, and smart cities (all at 24%). * Developers indicate that Java is the preferred language for IoT gateways and edge nodes, while C, C++, and Java are the most widely used languages for constrained devices. * MQTT is the top IIoT communication protocol. Nearly half of developers (49%) indicate a preference for MQTT for IIoT communications, with MQTT + Sparkplug checking in at 8%. * The withdrawal of IoT Middleware providers has created an opportunity for innovators to enter the market. Google Cloud IoT Platform, Bosch IoT Suite, IBM Watson IoT, and SAP Internet of Things all exited the market in 2022 or announced their intent to do so. While nearly half of respondents indicated a relationship with one or more of these providers, only 12% have migrated to a new provider. * Control logic (40%) surpassed artificial intelligence (37%) as the most common edge computing workload. Does this imply a renewed focus on the practical aspects of delivering real-world solutions? Only time will tell. * Software Supply Chain Security has become an essential issue for IoT/edge developers, with 70% saying it is vital to their work. * 5G is enabling accelerated IIoT adoption. Cellular adoption has doubled since 2022 (44% vs. 22% in 2022) largely due to 5G penetration, while WiFi (38% vs. 36% in 2022), Ethernet (38% vs 29% in 2022) and Bluetooth (23% vs 20% in 2022) continue to be viable options. The survey data contains further insights on developer choices for edge computing workloads, platform connectivity, developer concerns, and use case breakdowns by market. In addition, the report provides breakdowns of use cases by market and detailed recommendations on the next steps for IoT developers. The entire report can be downloaded here. About Eclipse IoT Eclipse IoT’s knowledge and expertise span 12+ years of experience in edge computing, IoT and Industrial IoT. Eclipse IoT is home to open source innovation that has delivered implementations of some of the industry’s most popular IoT protocols. CoAP (Eclipse Californium), DDS (Eclipse Cyclone DDS), LwM2M (Eclipse Leshan), MQTT (Eclipse Paho, Eclipse Mosquitto, and Eclipse Amlen), and OPC UA (Eclipse Milo) are all part of the Eclipse IoT ecosystem. The Eclipse IoT toolkit also contains an innovative homegrown protocol built from the ground up for edge computing: Eclipse Zenoh. In addition to other popular Eclipse IoT production-ready platforms that cover various use cases such as digital twins (Eclipse Ditto), contactless payments (Eclipse Keyple), industrial applications (Eclipse Kura), in addition to Eclipse Kapua — a modular IoT cloud platform that manages data and devices. Eclipse IoT is also the home of innovative edge orchestration platforms such as Eclipse ioFog and Eclipse Kanto. To learn more about how to get involved with Eclipse IoT, Edge Native, Sparkplug, or other working groups at the Eclipse Foundation, visit the Foundation’s membership page. Working group members benefit from a broad range of services, including exclusive access to detailed industry research findings, marketing assistance, and expert open source governance. For further IoT & edge-related information, please visit iot.eclipse.org. About the Eclipse Foundation The Eclipse Foundation provides our global community of individuals and organisations with a business-friendly environment for open source software collaboration and innovation. We host the Eclipse IDE, Adoptium, Software Defined Vehicle, Jakarta EE, and over 425 open source projects, including runtimes, tools, specifications, and frameworks for cloud and edge applications, IoT, AI, automotive, systems engineering, open processor designs, and many others. Headquartered in Brussels, Belgium, the Eclipse Foundation is an international non-profit association supported by over 350 members. To learn more, follow us on social media @EclipseFdn, LinkedIn, or visit eclipse.org. Third-party trademarks mentioned are the property of their respective owners. ### Media contacts: Schwartz Public Relations for the Eclipse Foundation, AISBL (Germany) Gloria Huppert, Franziska Wenzl EclipseFoundation@schwartzpr.de +49 (89) 211 871 - 70 / - 58 Nichols Communications for the Eclipse Foundation, AISBL Jay Nichols jay@nicholscomm.com +1 408-772-1551 514 Media Ltd for the Eclipse Foundation, AISBL (France, Italy, Spain) Benoit Simoneau benoit@514-media.com M: +44 (0) 7891 920 370 Tags Edge Computing IoT iot developers -------------------------------------------------------------------------------- by Jacob Harris at November 07, 2023 10:50 AM Eclipse Announcements THE ECLIPSE FOUNDATION ANNOUNCES SPARKPLUG AS AN INTERNATIONAL STANDARD FOR A “PLUG AND PLAY” INDUSTRIAL IOT by Jacob Harris at November 07, 2023 10:45 AM The Eclipse Foundation Announces Sparkplug as an International Standard for a “Plug and Play” Industrial IoT Jacob Harris Tue, 2023-11-07 05:45 BRUSSELS – November 7, 2023 – The Eclipse Foundation, one of the world’s largest open source software foundations, in collaboration with the Eclipse Sparkplug Working Group, today announced that the Sparkplug® 3.0 specification has been published as an International Standard. This publication is the outcome of a transposition of the specification through the Publicly Available Specification (PAS) transposition process offered by the ISO and IEC Joint Technical Committee (JTC 1) for information technology, a consensus-based, voluntary international standards group. The International Organization for Standardization and International Electrotechnical Commission (ISO/IEC) are global organisations that facilitate the development of International Standards that support innovation, sustainability, and global trade. Sparkplug® is an open software specification that enables mission-critical operational technology (OT) clients to use industry standards, including OASIS MQTT, to seamlessly integrate data from their applications, sensors, devices, and gateways with most Industrial Internet Of Things (IIoT) infrastructure. As a result, Sparkplug® enables businesses to easily deploy complex, mission-critical IIoT systems in record time. “The publication of Sparkplug® 3.0 as an international standard is significant, not just for the Sparkplug community, but for any organisation that needs to digitally transform their business by leveraging IIoT technologies,” said Mike Milinkovich, executive director for the Eclipse Foundation. “Sparkplug has been experiencing meteoric growth over the past few years, primarily driven by the ongoing transition to true IIoT infrastructure across multiple industries. It provides the key to true, easy integration across the many disparate technologies that make up this complex OT/IT ecosystem. Sparkplug’s new status as an international standard will accelerate this adoption while simultaneously serving as recognition of its immense value to the industry.” The PAS transposition process for reviewing and approving externally developed specifications at JTC 1 is neutral to all contributors and includes industry-wide participation. Going forward, the Sparkplug® specification will also be known as ISO/IEC 20237. The Eclipse Foundation retains stewardship of the specification and intends to submit future revisions through the PAS transposition process. “JTC 1 appreciates the opportunity to work with The Eclipse Foundation on this project, and we congratulate the Foundation on the approval of ISO/IEC 20237,” said Phil Wennblom, JTC 1 Chair. “JTC 1 looks forward to our future collaboration.” ISO/IEC International Standards are the global benchmarks for businesses, manufacturers, vendors, and service providers regarding approved and validated safety features, quality measures, and interoperability. By becoming an ISO/IEC standard, a technology is effectively established as a globally recognized technical ecosystem and benefits from global acceptance of products, accelerated adoption, and expanded reach. The Sparkplug® Working Group is simultaneously launching a product compatibility program for Sparkplug implementers. The program will ensure that Sparkplug-compatible products and implementations demonstrate a high degree of compatibility and interoperability. About Sparkplug® & MQTT Sparkplug® provides an open and freely available specification for how Edge of Network (EoN) gateways or native MQTT-enabled end devices and MQTT Applications communicate bi-directionally within an MQTT Infrastructure. It is recognized that OASIS MQTT is used across a broad spectrum of application solution use cases and an almost indefinable variation of network topologies. By design, the MQTT specification does not dictate a Topic Namespace or any payload encoding. However, as the IIoT and other architectures leveraging the publisher/subscriber model are adopted by device OEMs in the industrial sector, having different Topic Namespace and payload encoding can inhibit interoperability for the end customer. To that end, the Sparkplug specification addresses the following components within an MQTT infrastructure: * Sparkplug® defines an OT-centric Topic Namespace * Sparkplug® defines an OT-centric Payload definition optimised for industrial process variables. * Sparkplug® defines MQTT Session State management required by real-time OT SCADA systems. About the Eclipse Foundation The Eclipse Foundation provides our global community of individuals and organisations with a business-friendly environment for open source software collaboration and innovation. We host the Eclipse IDE, Adoptium, Software Defined Vehicle, Jakarta EE, and over 425 open source projects, including runtimes, tools, specifications, and frameworks for cloud and edge applications, IoT, AI, automotive, systems engineering, open processor designs, and many others. Headquartered in Brussels, Belgium, the Eclipse Foundation is an international non-profit association supported by over 350 members. To learn more, follow us on social media @EclipseFdn, LinkedIn, or visit eclipse.org. Third-party trademarks mentioned are the property of their respective owners. ### Media contacts: Schwartz Public Relations for the Eclipse Foundation, AISBL (Germany) Gloria Huppert, Franziska Wenzl EclipseFoundation@schwartzpr.de +49 (89) 211 871 - 70 / - 58 Nichols Communications for the Eclipse Foundation, AISBL Jay Nichols jay@nicholscomm.com +1 408-772-1551 514 Media Ltd for the Eclipse Foundation, AISBL (France, Italy, Spain) Benoit Simoneau benoit@514-media.com M: +44 (0) 7891 920 370 Image Tags sparkplug iiot -------------------------------------------------------------------------------- by Jacob Harris at November 07, 2023 10:45 AM NOVEMBER 06, 2023 John Kellerman ECLIPSE CLOUD DEVTOOLS DIGEST - SEPTEMBER AND OCTOBER 2023 by John Kellerman at November 06, 2023 07:18 PM Eclipse Cloud DevTools Digest - September and October 2023 THEIACON 2023! TheiaCon 2023, is right around the corner on November 15-16. We have an excellent program lined up. If you haven't registered yet, please do so, it's not too late. SIRIUS AND PAPYRUS Cedris Brun summarizes a talk he gave at EclipseCon 2023 on the collaboration between the Eclipse Sirius and Papyrus projects. This includes SysON, an implementation of a Web-based version of the forthcoming systems engineering standard ğ�—¦ğ�˜†ğ�˜€ğ�— ğ�—Ÿ ğ�˜ƒğ�Ÿ®. CONTRIBUTOR AWARDS TO STEFAN DIRIX AND THOMAS MäEDER The Cloud DevTools working group recognized Stefan Dirix for his work on CDT Cloud Blueprint and Thomas Mäeder for his many contributions to Theia. CDT CLOUD BLUEPRINT! Jonas, Maximilian & Philip, in their blog, highlight the debugging features of CDT Cloud Blueprint, a modern,  web-based and extensible all-open-source C/C++ IDE designed for both offline and online scenarios. In a second article, they explore the online and offline deployment possibilities for CDT Cloud Blueprint. TESTING WITH THEIA CLOUD Jonas, Maximilian & Philip, in this article, discuss Theia Cloud, a Kubernetes-based deployment of Theia, and how it can be used for end to end testing of your Theia-based application. THEIA OR CODE OSS FOR BUILDING A CUSTOM IDE? You're looking to build a custom IDE offering; should you build on Code OSS (the open source base of VS Code) or Eclipse Theia? In this article, Jonas, Maximilian & Philip provide an extensive look at answering this question. Spoiler alert: Theia is the better answer. JKUBE SECURITY AUDIT RESULTS PUBLISHED Mikaël Barbero, in his blog, provides a summary of the recent security audit of JKube. This is part of a broader effort by the Eclipse Foundation to assure the integrity of its open source projects. THEIA COMMUNITY RELEASE 2023-08 The Eclipse Theia Community Release 2023-08, version 1.40.x, is here! It includes significant enhancements like detachable view support for Electron applications, support for multiple extension registries, UI and usability improvements, and backend bundling for improved startup performance. RECENT RELEASES THEIA 1.41 THEIA 1.42 SPROTTY 1.0.0 SIRIUS DESKTOP 7.2.1 CLOUD TOOL TIME WEBINARS We are now scheduling Cloud Tool Time webinars for 2023. Be sure to Sign up now to get on the calendar and let us help tell your story. You can see past sessions on our Youtube channel. ECLIPSE CLOUD DEVTOOLS PROJECTS Explore the Eclipse Cloud DevTools ecosystem! Check out our projects page to find out more about open source innovation for cloud IDEs, extension marketplaces, frameworks and more. GETTING LISTED ON THE CLOUD DEVTOOLS BLOG If you are working with, or on, anything in the Cloud DevTools space, learn how to get your writings posted in our blog section. John Kellerman Mon, 2023-11-06 14:18 -------------------------------------------------------------------------------- by John Kellerman at November 06, 2023 07:18 PM JBoss Tools Team JBOSS TOOLS 4.29.0.FINAL FOR ECLIPSE 2023-09 by sbouchet at November 06, 2023 02:24 PM Happy to announce 4.29.0.Final build for Eclipse 2023-09. Downloads available at JBoss Tools 4.29.0 Final. WHAT IS NEW? Full info is at this page. Some highlights are below. GENERAL COMPONENTS REMOVAL As outlined and announced in a prior blog post, the subsequent components have been excluded from the latest JBoss Tools distribution: * WebServices * Batch HIBERNATE TOOLS HIBERNATE RUNTIME PROVIDER UPDATES Multiple additions and updates have been performed on the available Hibernate runtime providers. NEW RUNTIME PROVIDER A new Hibernate 6.3 runtime provider incorporates Hibernate Core version 6.3.1.Final, Hibernate Ant version 6.3.1.Final and Hibernate Tools version 6.3.1.Final. RUNTIME PROVIDER UPDATES The Hibernate 6.2 runtime provider now incorporates Hibernate Core version 6.2.13.Final, Hibernate Ant version 6.2.13.Final and Hibernate Tools version 6.2.13.Final. The Hibernate 5.3 runtime provider now incorporates Hibernate Core version 5.3.32.Final and Hibernate Tools version 5.3.32.Final. SERVER TOOLS NEW SERVER VIEW BASED ON RSP In JBoss Tools, a fresh perspective has been introduced, known as the "RSP Servers View," which utilizes the Remote Server Protocol (RSP). To begin, you must initiate the server connector responsible for managing the servers. Simply right-click on any entry for the Server connector, and choose the "Start RSP" option. The server connector is now starting and it’s status will change to [STARTED]. You can then choose between download a server or use a local server. Now, let’s create a new server. Simply right-click on the active Server connector and select "Download Server." Choose any runtime from the list and confirm by clicking OK. Follow the dialog steps for additional parameters and wait for the installation to finish. You can see a new entry on the server view with the selected server. Now start the server runtime using "Start Server" context menu action. The console view opens and display any message from the server. Now you can add any deployment to the server. This can be either a folder or a file, present on your local computer. For example, let’s deploy a basic web application. Right click on the started server runtime and select "Add deployment". Then select a web archive to be added to the server. It will automatically deploy the application and display any message in the console. Now you can enjoy the application on your browser ! We are welcoming any suggestion to this new view, either on our JIRA/Github, or using our gitter chatroom AND MORE… You can find more noteworthy updates in on this page. Enjoy! Stéphane Bouchet -------------------------------------------------------------------------------- by sbouchet at November 06, 2023 02:24 PM JBoss Tools Team JBOSS TOOLS 4.28.0.FINAL FOR ECLIPSE 2023-06 by sbouchet at November 06, 2023 02:24 PM Happy to announce 4.28.0.Final build for Eclipse 2023-06. Downloads available at JBoss Tools 4.28.0 Final. WHAT IS NEW? Full info is at this page. Some highlights are below. GENERAL COMPONENTS DEPRECIATION As communicated in a previous blog article, the following components are now deprecated: * Openshift CDK Tooling * Openshift Explorer view (already hidden by default) and wizards, targeting Openshift v3 The current openshift Application Explorer view, based on odo v3 is now the default supported tooling. Related JIRA: JBIDE-29044 HIBERNATE TOOLS RUNTIME PROVIDER UPDATES The Hibernate 6.2 runtime provider now incorporates Hibernate Core version 6.2.5.Final, Hibernate Ant version 6.2.5.Final and Hibernate Tools version 6.2.5.Final. The Hibernate 5.3 runtime provider now incorporates Hibernate Core version 5.3.30.Final and Hibernate Tools version 5.3.30.Final. NEW BACK-END USAGE We changed the backend system used in the usage bundle from Google Analytocs to Segment. This as no impact on how we collected usage inforamtion, neither change the opt-in choice made in previous version of JBossTools. As always, neither Eclipse nor JBoss will use any information unless a user has opted in, nor is there ever any personal information sent unless it is provided on the Preferences page. AND MORE… You can find more noteworthy updates in on this page. Enjoy! Stéphane Bouchet -------------------------------------------------------------------------------- by sbouchet at November 06, 2023 02:24 PM NOVEMBER 02, 2023 Jonas, Maximilian and Philip ECLIPSE THEIA 1.43 RELEASE: NEWS AND NOTEWORTHY by Jonas, Maximilian & Philip at November 02, 2023 12:00 AM We are happy to announce the Eclipse Theia 1.43 release! The release contains 40 merged pull requests and we welcome three new contributors. In this article, we will highlight some selected... The post Eclipse Theia 1.43 Release: News and Noteworthy appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at November 02, 2023 12:00 AM OCTOBER 31, 2023 N4JS N4JS CAN GENERATE TYPESCRIPT DEFINITIONS by n4js dev (noreply@blogger.com) at October 31, 2023 12:29 PM N4JS source code is transpiled into EcmaScript, making it an integral part of the JavaScript ecosystem. Within this ecosystem, it is utilized by various libraries. To facilitate this usage, N4JS now offers TypeScript type definition generation. The growing popularity of TypeScript as a programming language is evident in the increasing number of TypeScript packages and the download rates of pure type definition packages. The latter are primarily provided by the Definitely Typed repository, which currently includes type definitions for 8,724 libraries. By enabling the N4JS transpiler to generate TypeScript definition files, N4JS projects can be seamlessly imported into TypeScript projects while maintaining type safety. To activate the feature for '.d.ts' file generation, you can set the 'n4js->generator->d.ts' property to 'true' in the 'package.json' file. This setting applies to the entire project. In cases where multiple projects exist within a yarn workspace, the transpiler will respect projects that do not generate '.d.ts' files. In case type information gets exposed through a project that generates 'd.ts' files, those exposed types are cut off and will be treated as any types. When generating type information, import statements in 'd.ts' files may be added or removed, as some become obsolete while others are necessary. Despite their superficial similarities, N4JS and TypeScript differ in various aspects. For example, N4JS allows interfaces to provide static properties, and N4JS enums offer static properties like the getter literals that returns all literals of an enum. In the corresponding 'd.ts' files, these interfaces and enums are split up into TypeScript interfaces and enums along with a namespace bearing the same name (making use of TypeScript declaration merging). The additional namespace contains all properties that are static in the N4JS source code. To enable the use of built-in types, such as accessing N4JS reflection information, the transpiler also includes the file 'n4jsglobals.d.ts'. This file contains type information about reflection classes and provides types that mimic N4JS structural typing strategies (e.g. all readable fields/getters of a type C written as ~r~C in N4JS) using utility types of TypeScript. While N4JS and TypeScript may appear similar, they differ in several ways. For instance, TypeScript generics have the semantics of an implicit upper bound, written as C<? extends T> in Java, whereas N4JS generics are similar to Java and support both no explicit bounds, as well as upper or lower bounds (written as C<T>, C<? extends T>, and C<? super T>). Additionally, TypeScript does not support certain features, such as optional getters or setters. N4JS, on the other hand, supports this feature, treating a getter/setter pair as override-compatible to fields, which of course can be optional. These differences or unsupported language features in TypeScript may occasionally result in generated type definitions not aligning perfectly with respect to the runtime EcmaScript and/or N4JS source code. However, in the vast majority of cases, TypeScript type information significantly simplifies and accelerates the reuse of N4JS libraries in terms of coding assistance and type validation. by Marcus Mews -------------------------------------------------------------------------------- by n4js dev (noreply@blogger.com) at October 31, 2023 12:29 PM OCTOBER 24, 2023 Jonas, Maximilian and Philip CDT CLOUD BLUEPRINT: DEBUGGING by Jonas, Maximilian & Philip at October 24, 2023 12:00 AM Looking for a modern, web-based IDE for C/C++ development or aiming to develop a custom C/C++ tool? Dive in! This blog post highlights the debugging features of CDT Cloud Blueprint. Before we dive... The post CDT Cloud Blueprint: Debugging appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at October 24, 2023 12:00 AM OCTOBER 18, 2023 Eclipse Announcements ECLIPSE JETTY SECURITY AUDIT HAS BEEN COMPLETED by Jacob Harris at October 18, 2023 03:55 PM Eclipse Jetty Security Audit Has Been Completed Jacob Harris Wed, 2023-10-18 11:55 We’re proud to share that the Eclipse Foundation has completed the security audit for Eclipse Jetty, one of the world’s most widely deployed web server and servlet containers. All users are encouraged to upgrade to versions containing changes addressing all conclusions of the audit: Eclipse Jetty 12.0.0, 11.0.16, 10.0.16, and 9.4.53. URL https://blogs.eclipse.org/post/mika%C3%ABl-barbero/eclipse-jetty-security-audit… -------------------------------------------------------------------------------- by Jacob Harris at October 18, 2023 03:55 PM Mikael Barbero ECLIPSE JETTY SECURITY AUDIT HAS BEEN COMPLETED October 18, 2023 03:00 PM We’re proud to share that the Eclipse Foundation has completed the security audit for Eclipse Jetty, one of the world’s most widely deployed web server and servlet containers. All users are encouraged to upgrade to versions containing changes addressing all conclusions of the audit: Eclipse Jetty 12.0.0, 11.0.16, 10.0.16, and 9.4.53. Web/application servers and client libraries like ones included in Jetty need to support multiple protocols, such as HTTP/1, HTTP/2, HTTP/3, and various Jakarta EE standards. They handle data that could potentially come from malicious sources. Achieving this in a proper and secure manner can be quite challenging, and even experienced developers may inadvertently make errors. Additionally, such Jetty servers and clients are integrated with custom application code that handles data. The complete solutions are complex, and improving the security of each building block is crucial. This made Eclipse Jetty a good candidate for a security audit. The audit provided a set of general recommendations on the direction of Jetty’s architecture, and revealed some issues in the code base that were unknown to the development team. It has also led to two CVEs: CVE-2023-36479 and CVE-2023-36478, along with a list of bug fixes for the initial release of Jetty 12.0.0. Full Report Audits like these improve the security of the whole web services ecosystem for Java applications, both in the short term through fixes, and in the long term by showing potential risks and possible development directions. While Jetty has been hosted at the Eclipse Foundation since 2009, the project’s origins go back to 1995. Jetty is used extensively by millions of developers and in production environments around the world. Its small footprint, high performance, and scalability have made the server an appealing choice among enterprise application developers using a variety of Java, Scala, Kotlin, and other JVM-based languages. Jetty can be found in products and projects such as Apache Hadoop, Apache Maven, Google App Engine, Dropwizard, Spring Boot, the Javalin project, Zimbra, and the Eclipse IDE. This was our third open source project security audit, and was completed by Trail of Bits. Like our previous two audits, this initiative was done in collaboration with the Open Source Technology Improvement Fund (OSTIF) and was made possible thanks to the funding the Eclipse Foundation received from the Alpha-Omega Project. GET INVOLVED * Download Eclipse Jetty, and learn how you can contribute to the project. * Learn more about the Eclipse Cyber Risk Initiative, and how your organization can join the effort to strengthen the open source supply chain. Please subscribe to the ECRI mailing list to join the initiative, or to follow its progress. -------------------------------------------------------------------------------- October 18, 2023 03:00 PM OCTOBER 17, 2023 Eclipse Ditto ANNOUNCING ECLIPSE DITTO RELEASE 3.4.0 October 17, 2023 12:00 AM The Eclipse Ditto teams is proud to announce the availability of Eclipse Ditto 3.4.0. Version 3.4.0 mainly concentrates on exchanging the use of the Akka toolkit (due to a change in licensing) with its fork Apache Pekko which remains Apache 2.0 licensed. Apart from that, several improvements are also included which can be found in the changelog. ADOPTION Companies are willing to show their adoption of Eclipse Ditto publicly: https://iot.eclipse.org/adopters/?#iot.ditto When you use Eclipse Ditto it would be great to support the project by putting your logo there. CHANGELOG The main improvements and additions of Ditto 3.4.0 are: Eclipse Ditto 3.4.0 focuses on the following areas: * Supporting HTTP POST for performing searches with a very long query * Addition of a new placeholder to use in connections to use payload of the thing JSON e.g. in headers or addresses * New placeholder functions for joining multiple elements into a single string and doing URL-encoding and -decoding * Configure MQTT message expiry interval for published messages via a header * Reduce patch/merge thing commands to modify only the actually changed values with a new option * UI enhancements: * Adding sending messages to Things * Made UI (at least navigation bar) responsive for small screen sizes * Increase size of JSON editors in “edit” mode The following non-functional work is also included: * Swapping the Akka toolkit (because of its switch of license to BSL License after Akka v2.6.x) with its fork Apache Pekko which remains Apache 2.0 licensed. * Support for using AWS DocumentDB as a replacement for MongoDB * Improve logging by adding the W3C Trace Context traceparent header as MDC field to logs * Adjust handling of special MQTT headers in MQTT 5 * Optimize docker files * Migration of Ditto UI to TypeScript * There now is an official Eclipse Ditto Benchmark which shows how Ditto is able to scale horizontally and provides some tuning tips * Addition of a benchmark tooling to run own Ditto benchmarks The following notable fixes are included: * Fixed that failed retrieval of a policy (e.g. after policy change) leads to search index being “emptied out” * Fixed that putting metadata when updating a single scalar value did not work * UI fix, fixing that patching a thing will null values did not reflect that change in the UI Please have a look at the 3.4.0 release notes for a more detailed information on the release. ARTIFACTS The new Java artifacts have been published at the Eclipse Maven repository as well as Maven central. The Ditto JavaScript client release was published on npmjs.com: * @eclipse-ditto/ditto-javascript-client-dom * @eclipse-ditto/ditto-javascript-client-node The Docker images have been pushed to Docker Hub: * eclipse/ditto-policies * eclipse/ditto-things * eclipse/ditto-things-search * eclipse/ditto-gateway * eclipse/ditto-connectivity The Ditto Helm chart has been published to Docker Hub: * eclipse/ditto – The Eclipse Ditto team -------------------------------------------------------------------------------- October 17, 2023 12:00 AM Cedric Brun (SIRIUS + PAPYRUS) × WEB: A NEW ERA FOR COLLABORATIVE ENGINEERING TOOLS by Cédric Brun (cedric.brun@obeo.fr) at October 17, 2023 12:00 AM I am excited to announce our collaboration with CEA-List towards a new era of open-source model-based solutions! We’ve embarked on three joint and complementary initiatives: * ğ�—£ğ�—®ğ�—½ğ�˜†ğ�—¿ğ�˜‚ğ�˜€ adopting Sirius, * developing Web Editors for Papyrus alongside the ğ�—¦ğ�—¶ğ�—¿ğ�—¶ğ�˜‚ğ�˜€ ğ�—ªğ�—²ğ�—¯ platform, * beginning the implementation of a Web-based version of the forthcoming systems engineering standard ğ�—¦ğ�˜†ğ�˜€ğ�— ğ�—Ÿ ğ�˜ƒğ�Ÿ® through a project within the Eclipse Foundation named ğ�—¦ğ�˜†ğ�˜€ğ�—¢ğ�—¡. I had the pleasure to present all these initiatives at EclipseCon and at the Models 2023 - Industry Day, here are the slides: (Sirius + Papyrus) × Web: a new Era for Collaborative Engineering tools (Sirius + Papyrus) × Web: a new Era for Collaborative Engineering tools was originally published by Cédric Brun at CEO @ Obeo on October 17, 2023. -------------------------------------------------------------------------------- by Cédric Brun (cedric.brun@obeo.fr) at October 17, 2023 12:00 AM OCTOBER 12, 2023 John Kellerman ECLIPSE CLOUD DEVTOOLS CONTRIBUTOR AWARD: STEFAN DIRIX FOR CDT CLOUD BLUEPRINT (ONLINE) by John Kellerman at October 12, 2023 05:16 PM Eclipse Cloud DevTools Contributor Award: Stefan Dirix for CDT Cloud Blueprint (online) The Eclipse Cloud Developer Tools contributor award for August goes to Stefan Dirix at EclipseSource for his contributions to CDT Cloud Blueprint. Due to his very recent contributions to several participating components, you can now try CDT Cloud Blueprint online: CDT Cloud Blueprint is a template tool for integrating and combining a set of components to create a vanilla C/C++ IDE. You can download it, install it and use it for C/C++ development. As such, it provides a good overall experience of the capabilities of CDT Cloud and third party components. Further, as the sources and build scripts for CDT Cloud Blueprint are open source, you can use CDT Cloud Blueprint as a starting point to create your own custom C/C++ tool by integrating your toolchains, customizing the user interface, adding specific editors and views such as project editors or wizards, and wrapping it in your branding. Please refer to the documentation on how to build a custom tool based on CDT Cloud Blueprint for more information. CDT Cloud Blueprint combines and integrates various open source technologies provided by a diverse group of contributors. Stefan, as the project lead of CDT Cloud Blueprint, has done an excellent job, on a technical level, in integrating these technologies into one consistent tool. Equally as important, on a communication level, he is the pivotal element across several CDT Cloud projects, with contributions to participating projects such as Trace Compass Cloud, to ultimately enable the online version of CDT Cloud Blueprint. Of course, great technologies such as CDT Cloud depend on many contributors. We would like to also honor the strategic contributions from STMicroelectronics, Ericsson, Renesas, Arm and Kichwa Coders to CDT Cloud. Thank you Stefan, well earned and congratulations! The Cloud DevTools Working Group provides a vendor-neutral ecosystem of open-source projects focused on defining, implementing and promoting best-in-class web and cloud-based development tools. It is hosted at the Eclipse Foundation, current members of the group include AMD, Arm, EclipseSource, Ericsson, Obeo, RedHat, Renesas, STMicroelectronics and TypeFox. This Eclipse Cloud DevTools contributor award is sponsored by EclipseSource, providing consulting and implementation services for web-based tools, Eclipse GLSP, Eclipse Theia, and VS Code. John Kellerman Thu, 2023-10-12 13:16 -------------------------------------------------------------------------------- by John Kellerman at October 12, 2023 05:16 PM OCTOBER 09, 2023 Eclipse Ditto ECLIPSE DITTO BENCHMARK October 09, 2023 12:00 AM This blog post is presenting a benchmark of Eclipse Ditto. It consists of a few scenarios to cover most important ditto functionalities, test the performance and provide a tuning guide. This benchmark is done via the benchmark-tool, based on k6 load testing tool SETUP AND USED TOOLS * EKS cluster using m5.4xlarge nodes. * Deployed Ditto using ditto’s official helm chart, version 3.0.0, ditto version 3.3.5. * Deployed bitnami kafka helm chart, version 23.0.7, kafka version 3.4.0. * Deployed MMock instance - used as a ‘dummy’ receiver for ditto events and device commands. * k6 - load testing tool, used to implement the benchmark scenarios. * Deployed k6-operator - Kubernetes operator for running distributed k6 tests. * MongoDB instance of type M50, version 5.0.21 SCENARIOS The benchmark test consists of 4 test scenarios that can be executed independently and in parallel: * READ_THINGS - read things via HTTP ( get things by id ) * SEARCH_THINGS - search things via HTTP ( get things by applying search filter ) * MODIFY_THINGS - Modify things by sending ditto protocol kafka messages to specfic topic. Ditto kafka connection is reading from this topic and processes the messages. Ditto HTTP push connection is configured in ditto, which sends events from topic /things/twin/events?filter=eq(topic:action,’modified’) to a monster mock endpoint, which replies with HTTP status code 204. * DEVICE_LIVE_MESSAGES - Send live messages to things via HTTP. Ditto HTTP push connection is configured, which sends events from topic /things/live/messages to a monster mock endpoint, which replies with predefined ditto protocol message. PREPARATION 1 000 000 things are created with the benchmark-tool by sending Ditto protocol messages to the topic that a Ditto Kafka connection is configured to read from. This connection has an implicitThingCreation mapper configured. The thing template, configured in the connection mapper looks like the following: { "thing": { "thingId": "{{ header:device_id }}", "_policy": { "entries": { "DEVICE": { "subjects": { "nginx:ditto": { "type": "does-not-matter" } }, "resources": { "policy:/": { "revoke": [], "grant": [ "READ", "WRITE" ] }, "thing:/": { "revoke": [], "grant": [ "READ", "WRITE" ] }, "message:/": { "revoke": [], "grant": [ "READ", "WRITE" ] } } } } }, "definition": "org.eclipse.ditto:coffeebrewer:0.1.0", "attributes": { "location": "test location", "model": "Speaking coffee machine" }, "features": { "coffee-brewer": { "properties": { "brewed-coffees": 0 } } } } } Example created thing looks like the following: { "thingId": "org.eclipse.ditto:test-thing-1", "policyId": "org.eclipse.ditto:test-thing-1", "definition": "org.eclipse.ditto:coffeebrewer:0.1.0", "attributes": { "location": "test location", "model": "Speaking coffee machine" }, "features": { "coffee-brewer": { "properties": { "brewed-coffees": 0 } } } } WARMUP Before executing the scenarios, a special ‘warmup’ scenario is executed. It is making ‘GET’ requests so that entities are loaded in memory and caches are populated in order to provide optimal performance. Heap memory needed according to number of things: * 10 000 hot things ~1.8GB for things service and ~1GB for policies service. * 100 000 hot things - ~3.5GB for things service and ~3GB policies * 300 000 hot things - ~5GB for things service and ~5GB for policies service * 1 000 000 hot things - ~16GB for things service and ~15GB for policies service The size varies, depending on the size of the things and policies. The scenarios are run with 100 000 warmed up things. SCENARIOS RUN All services use the following java vm options: -XX:InitialHeapSize=5g -XX:MaxHeapSize=5g -XX:MaxRAMPercentage=75 -XX:ActiveProcessorCount=16 The scenarios run for 10 minutes each, screenshots are taken from Grafana, from exposed ditto metrics. READ THINGS This scenario executes HTTP GET requests for reading things by id, like so: ${DITTO_BASE_URI}/things/org.eclipse.ditto:test-thing-1 The tests show that with single instance of each service, it is possible to perform ~2800 reads/s. Attempting more, results in high garbage collection time and drop in performance which can be seen in the “GC” and “Gateway Traces” dashboards. Scaling gateway to 2 instances results in only ~3500 reads/s, because of high GC time for things service - ~5s. Scaling things service to 2 instances results in ~5600 reads/s. A maximum of 8400 reads/s was possible with 3 gateways and 2 things instances. Setup 1 instance of each service 2 gateway, 1 instance each else 2 gateway, 2 things, 1 instance each else 3 gateway, 2 things, 1 instance each else Reads/s ~2800 ~3500 ~5600 ~8400 Command Processing Time(ms) ~80 ~2000 ~50 ~70 SEARCH THINGS This scenario executes HTTP GET requests for searching things by id like so: ${DITTO_BASE_URI}/search/things?filter=eq(thingId, 'org.eclipse.ditto:test-thing-1') In this scenario, things-search service is used to perform a search query for things, based on the provided filter. The tests show that with single instance of each service, it is possible to perform ~1700 searches/s. Attempting more results in high garbage collection time and drop in performance, as can be seen in “GC” and “Gateway Traces” dashboards. With single instance of things service and 2 instances of gateway service, a maximum of ~2400 searches/s can be performed, with high GC time for things service - ~3s. Scaling things to 2 instances results in ~3400 searches/s. Scaling to 3 gateways does not show expected performance, because the nodes things pods run on have high CPU usage - ~90%. To perform more searches, nodes with more CPUs are needed. Setup 1 instance of each service 2 gateway, 1 instance each else 2 gateway, 2 things, 1 instance each else 3 gateway, 2 things, 1 instance each else Searches/s ~1700 ~2400 ~3400 ~4900 Command Processing Time(ms) ~70 ~100 ~50 ~100 MODIFY THINGS This scenario sends ditto protocol kafka messages, which cause twin modifies. Example message: device_id:org.eclipse.ditto:test-thing-1,ditto_message:y!{"topic":"org.eclipse.ditto/test-thing-1/things/twin/commands/modify","path":"features/coffee-brewer/properties/brewed-coffees","value":"10"} In this scenario, connectivity service is used to create a ditto kafka connection, which reads messages from the provided topic, maps them to a ditto modify command and forwards it to things service. The things service then executes mongodb update query and generates the thing modified event, which is pushed to the MMock service instance via an HTTP Push connection. Also, the kafka connection is configured with qos=1, which means if there is no acknowledgement that the thing is persisted, the operation will be retried. The HTTP Push connection looks like the following: { "id": "a70c0749-261a-474b-9fb2-8fff7bd84fb4", "name": "http-push-connection", "connectionType": "http-push", "connectionStatus": "open", "uri": "http://mmock-service:80", "sources": [], "targets": [ { "address": "POST:/{{ thing:id }}", "topics": [ "_/_/things/twin/events?filter=eq(topic:action,'modified')" ], "authorizationContext": [ "nginx:ditto" ], "headerMapping": {} } ], "clientCount": 1, "failoverEnabled": true, "validateCertificates": true, "processorPoolSize": 1, "specificConfig": { "parallelism": "1" }, "tags": [ "benchmark" ] } The kafka connection looks like the following: { "id": "4cd191cc-aabb-4965-a1b4-dfe8ae8674bc", "name": "kafka-source", "connectionType": "kafka", "connectionStatus": "open", "uri": "tcp://bitnami-kafka:9092", "sources": [ { "addresses": [ "create-update" ], "consumerCount": 1, "qos": 0, "authorizationContext": [ "nginx:ditto" ], "enforcement": { "input": "{{ header:device_id }}", "filters": [ "{{ entity:id }}" ] }, "headerMapping": {}, "payloadMapping": [ "ditto" ], "replyTarget": { "enabled": false } } ], "targets": [], "clientCount": 1, "failoverEnabled": true, "validateCertificates": true, "processorPoolSize": 1, "specificConfig": { "saslMechanism": "plain", "bootstrapServers": "bitnami-kafka:9092" }, "mappingDefinitions": { "ditto": { "mappingEngine": "Ditto", "options": { "thingId": "{{ header:device_id }}" }, "incomingConditions": { "sampleCondition": "fn:filter(header:ditto_message,'exists')" } } }, "tags": [ "benchmark" ] } By default, the ditto kafka consumer is throttled with limit of 100 number of messages/s per consumer. This is configured by the KAFKA_CONSUMER_THROTTLING_LIMIT env variable. This value is changed to 1000, since with the current setup, more than 500 messages can be processed. Single connectivity instance is able to perform ~800 modifies/s. However, “Outbound Message rates” panel shows failed published messages from our HTTP Push connection, and the following is observed from our connection logs: Ran into a failure when publishing signal: Outgoing HTTP request aborted: There are too many in-flight requests. This can have the following reasons:\na) The HTTP endpoint does not consume the messages fast enough.\nb) The client count and/or the parallelism of this connection is not configured high enough. Increasing the connection parallelism from 1(default) to 2 solves this issue and all outbound messages are sent without fails. ... "connectionType": "http-push", "specificConfig": { "parallelism": "2" }, ... Attempting more modifies/s does not result in better performance, the ditto kafka connection consumes at the same rate of 800 messages/s. Scaling connectivity instance and changing our connection to have clientCount equal to number of connectivity instances solves the GC issue. Performing 1600 modifies/s also results in high garbage collection time(~2s) for things and things-search services. This is the maximum that can be achieved with single things and things-search services. Scaling things and things-search solves the GC issue. Further scaling of connectivity results in only ~1800 modifies/s, because MongoDB’s write tickets get exhausted, as can be seen in the MongoDB ‘Tickets Available’ metric. Scaling MongoDB to higher CPU instance(M50 General, 8 cpu) solves the issue and ~2400 modifies/s are possible. Setup 1 instance of each service 2 connectivity, 1 instance each else 3 connectivity, 2 things, 2 things-search, 1 instance each else 4 connectivity, 2 things, 2 things-search, 1 instance each else Modifies/s ~800 ~1600 ~2400 ~3200 Signal Processing Times(ms) ~15 ~80 ~10 ~20 ACK Times(ms) ~40 ~250 ~50 ~100 DEVICE LIVE MESSAGES(COMMANDS) This scenario executes HTTP POST requests to ditto’s live channel. An HTTP Push connection is subscribed for them and in turn pushes to a MMock instance that acts as a ‘dummy’ device receiver of live messages/commands and simply responds with pre-configured ditto response. The HTTP POST request looks like the following: URL: ${DITTO_THINGS_URI}/org.eclipse.ditto:test-thing-1/inbox/messages/someSubject Request Body: "anyMessage" MMock pre-configured response looks like the following: { "topic": "{{request.body.topic}}", "status": "200", "value": "ok", "path": "{{request.body.path}}", "headers": { "correlation-id": "{{request.body.headers.correlation-id}}", "content-type": "application/json" } } The HTTP Push connection looks like the following: { "id": "a70c0749-261a-474b-9fb2-8fff7bd84fb4", "name": "http-push-connection", "connectionType": "http-push", "connectionStatus": "open", "uri": "http://mmock-service:80", "sources": [], "targets": [ { "address": "POST:/live_messages", "topics": [ "_/_/things/live/messages" ], "authorizationContext": [ "nginx:ditto" ], "headerMapping": {} } ], "clientCount": 1, "failoverEnabled": true, "validateCertificates": true, "processorPoolSize": 1, "specificConfig": { "parallelism": "1" }, "tags": [ "benchmark" ] } The tests show that a single connectivity instance is able to perform ~600 live messages/s. Attempting more results in high garbage collection time and high Command Processing Time, as can be seen in “GC” and “Gateway Traces” dashboards. Scaling the instances and increasing the value of connection clientCount solves the GC issue and doubles the messages/s. Performing more than 2400 live messages/s also results in high garbage collection time for things and gateway services and this is the maximum with single things and gateway services. Scaling things and gateway solves the issue and results in ~3000 live messages/s. Setup 1 instance of each service 2 connectivity, 1 instance each else 3 connectivity, 1 instance each else 4 connectivity, 1 instance each else 5 connectivity, 2 things, 2 gateway, 1 instance each else Live messages/s ~600 ~1200 ~1800 ~2400 ~3000 Command Processing Time(ms) ~50 ~50 ~100 ~240 ~50 Signal Processing Times(ms) ~15 ~15 ~40 ~90 ~20 ADDITIONAL TUNING PROPERTIES, NOT USED IN THE SCENARIOS Ditto ‘tuning’ environment variables, that were not mentioned, because those cases were never hit, while executing the scenarios. THING_PERSISTENCE_ACTOR_MAILBOX_SIZE - Used for special actor mailbox, which handles ThingModifyCommands, see org. eclipse.ditto.things.service.persistence.actors.ThingPersistenceActorMailbox. If number of messages is more than the mailbox capacity, modify command results in error, like the following: Too many modifying requests are already outstanding to the Thing with ID 'org.eclipse.ditto:test-thing-1'. REMOTE_OUTBOUND_MESSAGE_QUEUE_SIZE - See https://doc.akka.io/docs/akka/current/general/configuration-reference.html # Size of the send queue for outgoing messages. Messages will be dropped if # the queue becomes full. This may happen if you send a burst of many messages # without end-to-end flow control. Note that there is one such queue per # outbound association. The trade-off of using a larger queue size is that # it consumes more memory, since the queue is based on preallocated array with # fixed size. outbound-message-queue-size = 3072 If this limit is hit, the following error log will appear: Message [org.eclipse.ditto.things.model.signals.commands.modify.ModifyAttribute] from Actor [akka://ditto-cluster/temp/thingProxy$AsP9C] to Actor[akka://ditto-cluster@10.0.157. 154:2552/system/sharding/thing#362290016] was dropped. Due to overflow of send queue, size [3072]. [10] dead letters encountered, no more dead letters will be logged in next [5.000 min]. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. -------------------------------------------------------------------------------- October 09, 2023 12:00 AM OCTOBER 06, 2023 Jonas, Maximilian and Philip ECLIPSE THEIA 1.42 RELEASE: NEWS AND NOTEWORTHY by Jonas, Maximilian & Philip at October 06, 2023 12:00 AM We are happy to announce the Eclipse Theia 1.42 release! The release contains 21 merged pull requests and we welcome three new contributors. In this article we will highlight some selected... The post Eclipse Theia 1.42 Release: News and Noteworthy appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at October 06, 2023 12:00 AM OCTOBER 04, 2023 Christopher Guindon DROPPING SUPPORT FOR INTERNET EXPLORER 11 IN 2024 October 04, 2023 02:30 PM Microsoft announced the retirement of Internet Explorer 11 (IE 11) on June 15, 2022. In alignment with this industry change and our upcoming migration to Drupal 10 and Bootstrap 5, we are formally announcing that we will cease support for IE 11 effective January 1, 2024. Our decision to extend support until 2024 is strategic. Based on our website analytics, a small but significant 3% of our user base is still utilizing IE 11. It’s important to remember that IE 11 is a legacy browser that is no longer supported by Microsoft, posing increased security risks. We believe this timeline will provide ample opportunity for users to transition to modern, more secure browsers while allowing us to align our technical roadmap. WHAT DOES THIS MEAN FOR YOU? For those still using IE 11, we strongly urge you to transition to a modern browser before January 1, 2024. Popular alternatives include Microsoft Edge, Google Chrome, and Mozilla Firefox, all of which offer a more secure and efficient browsing experience. We understand that this is a significant change, and we want to hear from you. If you have any concerns or objections, please participate in our discussion. While we aim to be as inclusive as possible in terms of browser support, technological advancements necessitate this inevitable shift. We believe that by giving our community advance notice, we’re ensuring a smoother transition for everyone involved. -------------------------------------------------------------------------------- October 04, 2023 02:30 PM Jonas, Maximilian and Philip CDT CLOUD BLUEPRINT: TRY IT ONLINE! (...OR OFFLINE) by Jonas, Maximilian & Philip at October 04, 2023 12:00 AM Are you looking for a modern, web-based C/C++ IDE that seamlessly operates within your browser as well as a conventional desktop application? Whether you aim to create a tailored, domain-specific... The post CDT Cloud Blueprint: Try it Online! (...or offline) appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at October 04, 2023 12:00 AM OCTOBER 03, 2023 Eclipse Announcements ECLIPSE FOUNDATION ESTABLISHES CATEGORY A LIAISON WITH ISO/IEC JTC 1/SC 38 FOR CLOUD COMPUTING AND DISTRIBUTED PLATFORMS by Frédéric Desbiens at October 03, 2023 01:00 PM Eclipse Foundation Establishes Category A Liaison With ISO/IEC JTC 1/SC 38 for Cloud Computing and Distributed Platforms Frédéric Desbiens Tue, 2023-10-03 09:00 In preparation for the upcoming launch of the Eclipse Dataspaces Working Group, we are proud to announce the establishment of a Category A liaison between Eclipse Foundation AISBL and ISO/IEC JTC 1/SC 38 (Cloud Computing and Distributed Platforms). SC 38 pursues standardization in Cloud Computing and Distributed Platforms, including Foundational concepts and technologies, operational issues, and interactions among cloud computing systems and other distributed systems. A dataspace is a multi-organizational agreement and a supporting technical infrastructure enabling data sharing between two or more participants. Dataspaces are naturally distributed, hence SC 38's interest in them. The Eclipse Foundation is home to the Eclipse Dataspace Components project (EDC). EDC is a comprehensive framework providing a basic set of features that dataspace implementations can use and customize while preserving interoperability through a well-defined API. EDC implements the Gaia-X AISBL Trust Framework and the IDSA Dataspace protocol. By establishing this liaison, the Eclipse Foundation intends to contribute its expertise to future standardization efforts revolving around cloud computing, dataspaces, and edge computing. Existing and upcoming Eclipse specifications could eventually be transposed into standards as well. The Eclipse Foundation obtained the status of Publicly Available Specification (PAS) submitter back in November 2022. Since then, it has successfully submitted its Sparkplug specification for transposition as an international standard. Sparkplug will officially be published as ISO/IEC 20237 in the upcoming months. -------------------------------------------------------------------------------- by Frédéric Desbiens at October 03, 2023 01:00 PM OCTOBER 02, 2023 John Kellerman ECLIPSE CLOUD DEVTOOLS CONTRIBUTOR AWARD: THOMAS MÄEDER FOR EXTRAORDINARY CONTRIBUTIONS TO THEIA by John Kellerman at October 02, 2023 03:59 PM Eclipse Cloud DevTools Contributor Award: Thomas Mäeder for Extraordinary Contributions to Theia The Eclipse Cloud Developer Tools contributor award for October goes to Thomas Mäeder at Castle Ridge Software for his innovative and highly impactful contributions to Eclipse Theia. This includes, very recently, the last missing piece for full VS Code extension compatibility to Theia! Image Thomas has been an integral part of Eclipse Theia for years, demonstrating not only a deep technical knowledge that allows him to contribute significant features, but also a commitment to maintaining the quality of the project. He has a strong emphasis on fostering good communication within the community, making him a valued member of the ecosystem. Thomas plays a key role in discussions and decision-making processes with his thoughtful perspectives and insights. Thomas consistently looks out for the overall well being of the Theia ecosystem. Thomas's contribution list is too long to enumerate. Recently, he initiated a new implementation of the RPC communication protocol in Theia that is 30 times faster than before. In September, he had the honor of completing a huge milestone for Theia. With his contribution of the Test API, Theia achieves full compatibility with VS Code extensions. It is worth mentioning that technologies like Eclipse Theia are reliant on the efforts of many contributors and Theia is fortunate to have an active and diverse group of developers. As an example, the Test API was originally initiated by a group of students. It's important to recognize and honor individual contributors who stand out and make a significant impact. Without a doubt, Thomas Mäeder is one such developer, making this award thoroughly well-deserved. Congratulations, Thomas! The Cloud DevTools Working Group provides a vendor-neutral ecosystem of open-source projects focused on defining, implementing and promoting best-in-class web and cloud-based development tools. It is hosted at the Eclipse Foundation, current members of the group include AMD, Arm, EclipseSource, Ericsson, Obeo, RedHat, Renesas, STMicroelectronics and TypeFox. This Eclipse Cloud DevTools contributor award is sponsored by EclipseSource, providing consulting and implementation services for web-based tools, Eclipse GLSP, Eclipse Theia, and VS Code. John Kellerman Mon, 2023-10-02 11:59 -------------------------------------------------------------------------------- by John Kellerman at October 02, 2023 03:59 PM SEPTEMBER 27, 2023 Christopher Guindon NAVIGATING THE SHIFT FROM DRUPAL 7 TO DRUPAL 9/10 AT THE ECLIPSE FOUNDATION September 27, 2023 02:30 PM We’re currently in the middle of a substantial transition as we are migrating mission-critical websites from Drupal 7 to Drupal 9, with our sights set on Drupal 10. This shift has been motivated by several factors, including the announcement of Drupal 7 end-of-life which is now scheduled for January 5, 2025, and our goal to reduce technical debt that we accrued over the last decade. To provide some context, we’re migrating a total of six key websites: * projects.eclipse.org: The Eclipse Project Management Infrastructure (PMI) consolidates project management activities into a single consistent location and experience. * accounts.eclipse.org: The Eclipse Account website is where our users go to manage their profiles and sign essential agreements, like the Eclipse Contributor Agreement (ECA) and the Eclipse Individual Committer Agreement (ICA). * blogs.eclipse.org: Our official blogging platform for Foundation staff. * newsroom.eclipse.org: The Eclipse Newsroom is our content management system for news, events, newsletters, and valuable resources like case studies, market reports, and whitepapers. * marketplace.eclipse.org: The Eclipse Marketplace empowers users to discover solutions that enhance their Eclipse IDE. * eclipse.org/downloads/packages: The Eclipse Packaging website is our platform for managing the publication of download links for the Eclipse Installer and Eclipse IDE Packages on our websites. THE PROGRESS SO FAR We’ve made substantial progress this year with our migration efforts. The team successfully completed the migration of Eclipse Blogs and Eclipse Newsroom. We are also in the final stages of development with the Eclipse Marketplace, which is currently scheduled for a production release on October 25, 2023. Next year, we’ll focus our attention on completing the migration of our more substantial sites, such as Eclipse PMI, Eclipse Accounts, and Eclipse Packaging. MORE THAN A SIMPLE MIGRATION: DECOUPLING DRUPAL APIS WITH QUARKUS This initiative isn’t just about moving from one version of Drupal to another. Simultaneously, we’re undertaking the task of decoupling essential APIs from Drupal in the hope that future migration or upgrade won’t impact as many core services at the same time. For this purpose, we’ve chosen Quarkus as our preferred platform. In Q3 2023, the team successfully migrated the GitHub ECA Validation Service and the Open-VSX Publisher Agreement Service from Drupal to Quarkus. In Q4 2023, we’re planning to continue down that path and deploy a Quarkus implementation of several critical APIs such as: * Account Profile API: This API offers user information, covering ECA status and profile details like bios. * User Deletion API: This API monitors user deletion requests ensuring the right to be forgotten. * Committer Paperwork API: This API keeps tabs on the status of ongoing committer paperwork records. * Eclipse USS: The Eclipse User Storage Service (USS) allows Eclipse projects to store user-specific project information on our servers. CONCLUSION: A FORWARD-LOOKING TRANSITION Our migration journey from Drupal 7 to Drupal 9, with plans for Drupal 10, represents our commitment to providing a secure, efficient, and user-friendly online experience for our community. We are excited about the possibilities this migration will unlock for us, advancing us toward a more modern web stack. Finally, I’d like to take this moment to highlight that this project is a monumental team effort, thanks to the exceptional contributions of Eric Poirier and Théodore Biadala, our Drupal developers; Martin Lowe and Zachary Sabourin, our Java developers implementing the API decoupling objective; and Frederic Gurr, whose support has been instrumental in deploying our new apps on the Eclipse Infrastructure. -------------------------------------------------------------------------------- September 27, 2023 02:30 PM SEPTEMBER 21, 2023 Eclipse Announcements THE CRA SHOULD SUPPORT OPEN PRACTICES OF OPEN SOURCE AND THE DEVELOPMENT OF EUROPEAN OPEN SOURCE TO THE ADVANTAGE OF SMALL AND MEDIUM SIZE ENTREPRISES (SMES) by Shanda Giacomoni at September 21, 2023 05:00 AM The CRA should support open practices of open source and the development of European Open source to the advantage of small and medium size entreprises (SMEs) Shanda Giacomoni Thu, 2023-09-21 01:00 As the European Union is about to initiate negotiations between co-legislators on the Cyber Resilience Act (CRA), we, the undersigned organisations and contributors to leading European open source software (OSS), herewith express our utmost concerns about the consequences of the proposed CRA, and misconceptions throughout the EU legislative process. In this time of increasing awareness of the challenges to European open strategic autonomy, Europe needs a strong open source community supportive of SMEs, startups and scaleups, but also accountability of large corporations in increasing cybersecurity. We deeply share the CRA’s aim to improve cybersecurity in the EU and embrace the urgent need to protect citizens and economies by improving software security. We welcome some recent positive changes brought by the co-legislators, such as the manufacturers’ obligation to report vulnerabilities to the entity maintaining OSS. However, should the proposal or the position of the European Parliament be adopted as it stands, the CRA would: decrease the number of OSS projects available to European SMEs; increase the control over OSS initiatives by large corporations; jeopardise the fragile equilibrium that benefits SMEs which contributes to European innovation; and reduce the security of products available to consumers. Thus, in order to not harm European innovation we urge co-legislators to consider the following: * Clearly state that if open source software under the governance of a non-profit falls within the scope of the legislation, legal responsibility should only be on commercial entities supplying the software in the course of a commercial activity, and not the governing non-profit which makes the software available free of charge; * Recognise for open source software that is under the governance of non-profits that are acting as neutral spaces, those non-profits may accept to collaborate with for-profit entities by coordinating the compliance of the software; * Allow the CE marking and overall compliance managed by commercial entities, to be reusable by the OS community. With these elements the CRA could achieve one of its objectives to regulate and improve the cybersecurity practices of OSS used in commercial activities without altering the equilibrium of OSS development, research and collaboration, which currently plays to the advantage of European SMEs and innovation. The undersigned organisations collectively represent a large part of the open source ecosystem in Europe. We offer our collective expertise, and support an increased dialogue towards the CRA’s successful implementation in this new regulatory paradigm. Download the PDF in English. -------------------------------------------------------------------------------- by Shanda Giacomoni at September 21, 2023 05:00 AM SEPTEMBER 20, 2023 Jonas, Maximilian and Philip USING THEIA CLOUD TO END-TO-END TEST THEIA-BASED APPLICATIONS by Jonas, Maximilian & Philip at September 20, 2023 12:00 AM Do you develop a Theia-based application and you want an easy way to end-to-end test new versions of it. Do you want to dynamically deploy new versions of your Theia application, ideally on every new... The post Using Theia Cloud to end-to-end test Theia-based applications appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at September 20, 2023 12:00 AM SEPTEMBER 19, 2023 Mike Milinkovich NEW SURVEY: HOW DO DEVELOPERS FEEL ABOUT ENTERPRISE JAVA IN 2023? by Mike Milinkovich at September 19, 2023 01:00 PM The results of the 2023 Jakarta EE Developer Survey are now available! For the sixth year in a row, we’ve reached out to the enterprise Java community to ask about their preferences and priorities for cloud native Java architectures, technologies, and tools, their perceptions of the cloud native application industry, and more. From these results, it is clear that open source cloud native Java is on the rise following the release of Jakarta EE 10.The number of respondents who have migrated to Jakarta EE continues to grow, with 60% saying they have already migrated, or plan to do so within the next 6-24 months. These results indicate steady growth in the use of Jakarta EE and a growing interest in cloud native Java overall. When comparing the survey results to 2022, usage of Jakarta EE to build cloud native applications has remained steady at 53%. Spring/Spring Boot, which relies on some Jakarta EE specifications, continues to be the leading Java framework in this category, with usage growing from 57% to 66%. Since the September 2022 release, Jakarta EE 10 usage has grown to 17% among survey respondents. This community-driven release is attracting a growing number of application developers to adopt Jakarta EE 10 by offering new features and updates to Jakarta EE. An equal number of developers are running Jakarta EE 9 or 9.1 in production, while 28% are running Jakarta EE 8. That means the increase we are seeing in the migration to Jakarta EE is mostly due to the adoption of Jakarta EE 10, as compared to Jakarta EE 9/9.1 or Jakarta EE 8. The Jakarta EE Developer Survey also gives us a chance to get valuable feedback on features from the latest Jakarta EE release, as well as what direction the project should take in the future. Respondents are most excited about Jakarta EE Core Profile, which was introduced in the Jakarta EE 10 release as a subset of Web Profile specifications designed for microservices and ahead-of-time compilation. When it comes to future releases, the community is prioritizing better support for Kubernetes and microservices, as well as adapting Java SE innovations to Jakarta EE — a priority that has grown in popularity since 2022. This is a good indicator that the Jakarta EE 11 release plan is on the right direction by adopting new Java SE 21 features. 2,203 developers, architects, and other tech professionals participated in the survey, a 53% increase from last year. This year’s survey was also available in Chinese, Japanese, Spanish & Portuguese, making it easier for Java enthusiasts around the world to share their perspectives. Participation from the Chinese Jakarta EE community was particularly strong, with over 27% of the responses coming from China. By hearing from more people in the enterprise Java space, we’re able to get a clearer picture of what challenges developers are facing, what they’re looking for, and what technologies they are using. Thank you to everyone who participated! LEARN MORE We encourage you to download the report for a complete look at the enterprise Java ecosystem. If you’d like to get more information about Jakarta EE specifications and our open source community, sign up for one of our mailing lists or join the conversation on Slack. If you’d like to participate in the Jakarta EE community, learn how to get started on our website. -------------------------------------------------------------------------------- by Mike Milinkovich at September 19, 2023 01:00 PM SEPTEMBER 15, 2023 Mikael Barbero ECLIPSE FOUNDATION PUBLISHES RESULTS OF ECLIPSE JKUBE SECURITY AUDIT September 15, 2023 02:00 PM Today, the Eclipse Foundation released the results of our security audit for Eclipse JKube, a collection of tools for building Java applications that can be deployed to a cloud environment. Findings from the audit have been addressed in the 1.13 release leading to a new feature. This audit included a documentation review, static code review and manual review, which uncovered two findings that have been addressed by the JKube team through container configuration improvements. Eclipse JKube originated in 2020 as the successor to the Fabric8 Maven plug-in, which was deprecated the same year. Consisting of plug-ins and components for building container images using Docker, Java image builder (Jib), or Source-to-Image (S2I) build strategies, JKube makes it easy to transition Java applications to the cloud by deploying them in Kubernetes. By default, JKube’s Kubernetes deployment artifacts did not have many of Kubernetes’ security features enabled. To address the audit’s findings and improve the overall security of JKube’s generated Kubernetes resources, the JKube team introduced a Security Hardening profile in the project’s 1.13 release. The profile disables the auto-mounting of the service account token, prevents containers from running in privileged mode, and ensures containers do not allow privilege escalation. Check out the full report for more information. Full Report This was our second open source project security audit, and was completed by Trail of Bits. Like with the Equinox p2 security audit, this initiative was done in partnership with the Open Source Technology Improvement Fund (OSTIF) and was made possible due to the funding the Eclipse Foundation received from the Alpha-Omega Project. Impartial security audits like this play an important role in securing the open source software supply chain. Developers looking to containerize Java applications with JKube can now be confident in the security of their applications. Keep an eye on our blog for more security audit announcements in the future. GET INVOLVED * Get started with Eclipse JKube, and learn how you can contribute to the project. * Learn more about the upcoming Eclipse Cyber Risk Initiative, and how your organization can join the effort to strengthen the open source supply chain. Please subscribe to the ECRI mailing list to join the initiative, or to follow its progress. -------------------------------------------------------------------------------- September 15, 2023 02:00 PM Jonas, Maximilian and Philip THE ECLIPSE THEIA COMMUNITY RELEASE 2023-08 by Jonas, Maximilian & Philip at September 15, 2023 12:00 AM We are happy to announce the fourth Eclipse Theia community release “2023-08”, version 1.40.x! Don’t know about Eclipse Theia, yet? It is the next-generation platform for building... The post The Eclipse Theia Community Release 2023-08 appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at September 15, 2023 12:00 AM SEPTEMBER 13, 2023 Webtools News WTP 3.31 RELEASED! September 13, 2023 11:59 PM The Eclipse Web Tools Platform 3.31 has been released! Installation and updates can be performed using the Eclipse IDE 2023-09 Update Site or through any of the related Eclipse Marketplace . Release 3.31 is included in the 2023-09 Eclipse IDE for Enterprise Java and Web Developers , with selected portions also included in several other packages . Adopters can download the R3.31 p2 repository directly and combine it with the necessary dependencies, as well as check the New Help for Old Friends document as a high number of bundles have updated their BREEs in this release. More news -------------------------------------------------------------------------------- September 13, 2023 11:59 PM SEPTEMBER 08, 2023 Jonas, Maximilian and Philip ECLIPSE THEIA VS. VS CODE OSS by Jonas, Maximilian & Philip at September 08, 2023 12:00 AM Do you want to build a custom tool or IDE offering and were wondering which web-based platform to choose? Are you evaluating Eclipse Theia against Code OSS (the open source project behind VS Code)? In... The post Eclipse Theia vs. VS Code OSS appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at September 08, 2023 12:00 AM SEPTEMBER 06, 2023 John Kellerman ECLIPSE CLOUD DEVTOOLS DIGEST - JULY AND AUGUST 2023 by John Kellerman at September 06, 2023 07:53 PM Eclipse Cloud DevTools Digest - July and August 2023 2023 ECLIPSE CLOUD DEVELOPER SURVEY PUBLISHED The Eclipse Foundation and the Cloud DevTools Working Group published the results from its 2023 Cloud Developer Survey. Spoiler alert: Cloud-based software developer tools are experiencing significant momentum and organizations are increasingly looking to solutions governed by an open source software foundation. CLOUD DEVTOOLS CONTRIBUTOR AWARDS TO STMICROELECTRONICS AND MARK SUJEW The Eclipse Cloud Developer Tools contributor award for July goes to Mark Sujew at TypeFox for his continuous, strategic and valuable contributions to Eclipse Theia, including recently for example, his contributions to enable remote SSH support for Eclipse Theia! The August contributor award goes to STMicroelectronics for initiating the support for TypeScript-based GLSP server implementations. EMBEDDED SIG EVOLVES TO CDT CLOUD PROJECT The Embedded Special Interest Group (SIG) hosted as part of the Eclipse Cloud DevTools working group has now evolved into the CDT Cloud project. This reflects the growth and continuously high level of activity in the group, which has outgrown the original governance structure and matured into the establishment of several active open source initiatives under the CDT Cloud umbrella. ECLIPSE JKUBE 1.14 IS NOW AVAILABLE Image Marc Nuri, in his blog, updates us on what's on new and noteworthy for JKube 1.14, including Gradle 8 and Helidon support. ECLIPSE THEIA RELEASES Image Jonas, Maximilian & Philip, in their blog, provide updates for Theia releases 1.39 and 1.40, including support for multiple extension registries, Electron application detachable views, conditions on exception breakpoints, and a number of usability and performance enhancements. JBOSS TOOLS 4.28 RELEASE Image The JBoss team announced JBoss Tools 4.28.0 for Eclipse 2023-06. This release includes deprecations for some Openshift support, updates to Hibernate runtime support, and a move on the backend from Google Analytics to Segment. THEIACON 2023 AND COMMUNITY DAY AT ECLIPSECON EVENTS The Eclipse Cloud DevTools and Open VSX Working Groups will be co-hosting a Community Day event at EclipseCon on October 16th. Last year’s Community Day was well-attended and a very informative and enjoyable time was had by all. Be sure to submit your topics for this years event. The Call for Presentations is also now live for TheiaCon 2023, which will be held virtually on November 15-16. We look forward to another excellent program and encourage you to submit your proposals early. CLOUD TOOL TIME WEBINARS We are now scheduling Cloud Tool Time webinars for 2023. Be sure to Sign up now to get on the calendar and let us help tell your story. You can see past sessions on our Youtube channel. ECLIPSE CLOUD DEVTOOLS PROJECTS Explore the Eclipse Cloud DevTools ecosystem! Check out our projects page to find out more about open source innovation for cloud IDEs, extension marketplaces, frameworks and more. GETTING LISTED ON THE CLOUD DEVTOOLS BLOG If you are working with, or on, anything in the Cloud DevTools space, learn how to get your writings posted in our blog section. John Kellerman Wed, 2023-09-06 15:53 -------------------------------------------------------------------------------- by John Kellerman at September 06, 2023 07:53 PM SEPTEMBER 05, 2023 Jonas, Maximilian and Philip ECLIPSE THEIA 1.41 RELEASE: NEWS AND NOTEWORTHY by Jonas, Maximilian & Philip at September 05, 2023 12:00 AM We are happy to announce the Eclipse Theia 1.41 release! Even though we are still in vacation season, the release contains 50 merged pull requests and we welcome three new contributors. In this... The post Eclipse Theia 1.41 Release: News and Noteworthy appeared first on EclipseSource. -------------------------------------------------------------------------------- by Jonas, Maximilian & Philip at September 05, 2023 12:00 AM BLOGS ACTIVE BLOGS * Cedric Brun * Christopher Guindon * Clark Roundy * Donald Raab * Eclipse Announcements * Eclipse Ditto * Glyn Normington * JBoss Tools Team * John Kellerman * Jonas Helming * Lorenzo Bettini * Marc Nuri * Mikael Barbero * Mike Milinkovich * Mukul Gandhi * N4JS * Sharon Corbett * Wayne Beaton * Webtools News INACTIVE BLOGS * Abel Muino * Aleksandr Kravets * Alex Blewitt * Alex Lagarde * Alex Radeski * Alex Ruiz * Alexander Kurtakov * Alexander Nyssen * Andre Oosthuizen * Andrea Zoppello * Andreas Graf * Andreas Muelder * Andres Alvarez Mattos * Andrew Eisenberg * Andrew Niefer * Andrew Ross * Andrey Loskutov * Andy Clement * Andy Piper * Angelo Zerr * Ankur Sharma * Annamalai Chockalingam * Anne Haugommard * Anthony Hunter * Anthony Juckel * Antoine Thomas * Antoine Toulme * Axel Meinhardt * Ayushman Jain * BJ Hargrave * Ben Vitale * Benjamin Cabe * Benno Baumgartner * Benoit Langlois * Bernd Kolb * BioClipse * Birt World * Blaise Doughan * Blinki * Bob Balfe * Boris Bokowski * Borislav Kapukaranov * Brian Fitzpatrick * Brian Fitzpatrick * Brian de Alwis * Bryan Hunt * Carlos Sanchez * Carlos Valcarcel * Chetan Kumar Kotha * Chris Aniszczyk * Chris Daniel * Chris Gross * Chris Recoskie * Christian Damus * Christian Krause * Christian Meier * Christian Pontesegger * Christoph Kulla * Code Recommenders * Craig Setera * Ctrlflow * Ctrlflow * DSL Forge * Daniel Ford * Darin Swanson * Dariusz Luksza * Dave Carver * David Black * David Bosschaert * David Bosschaert * David Green * David Kyle * Dean Roberts * Deepak Azad * Del Myers * Denis Roy * Dinis Cruz * Dirk Fauth * Donald Smith * Doug Clarke * Doug Schaefer * Eclipse Che * Eclipse Cloud DevTools * Eclipse Committer Reps * Eclipse Dirigible * Eclipse Enthusiasts Poznań * Eclipse Gyrex * Eclipse Jubula * Eclipse Lyo * Eclipse Membership * Eclipse Scout * EclipseCon Europe 2019 * EclipseLink Team * EclipseLive * Ed Burnette * Ed Merks * Edmundo López B. * Egon Willighagen * Eike Stepper * Ekkehard Gentz * Elias Volanakis * Elliott Baron * Emil Crumhorn * Emilien Perico * Erdal Karaca * Eric Moffatt * Eric Rizzo * Erkki Lindpere * Etienne Juliot * Eugene Kuleshov * Eugene Ostroukhov * Fabian Steeg * Fabio Zadrozny * Felipe Heidrich * Florian Lautenbacher * Florian Pirchner * Florian Thienel * Florian Waibel * Florian Weßling * Francis Upton * Francisco Gortazar-Bellas * Frank Appel * Frank Turovich * Fred Grott * Freddy Allilaire * Frederic Madiot * GEF3D * Geniutec * Gorkem Ercan * Goulwen Le Fur * Gunnar Wagenknecht * Hasan Ceylan * Heiko Behrens * Heiko Seeberger * Hendrik Eeckhaut * Hendrik Still * Hendy Irawan * Henrik Lindberg * Herman Lintvelt * Hiroki Kondo (kompiro) * Holger Staudacher * Holger Voormann * Hudson-CI Blog * Human Centered Web (HCW) * Ian Bull * Ian Skerrett * Ilya Shinkarenko * Imran Abdul Rahiman * InfoQ Eclipse feed * Inside Designerator * Ismael Juma * Jacek Pospychala * Jae Gangemi * James Ervin * James Sutherland * Jan Kohnlein * Jason van Zyl * Jazz Team * Jeeeyul Lee * Jeff McAffer * Jens Reimann * Jens von Pilgrim * Jeremie Bresson * Jerome Benois * Jesper Møller * Jiang Hu * Jin Mingjian * Joachim Hofer * Jochen Krause * Joern Weigle * John Arthorne * John Bito * John Dang * John Graham * Jonas Helming * Jonas Hungershausen * Jonas, Maximilian and Philip * Jonathan Musset * Jpicture Data Binding Team * Julius Shaw * Kai Kreuzer * Kai Toedter * Kai Zimmermann * Kaloyan Raev * Kaloyan Raev * Karl Beecher * Karsten Thoms * Ken Gilmer * Ken Ryall * Kenn Hussey * Kent Beck * Ketan Padegaonkar * Kevin Vu * Kichwa Coders * Kim Horne * Kim Moir * Knut Wannheden * Konstantin Komissarchik * Lars Vogel * Laurent Goubet * Lawrence Mandel * Leo Ufimtsev * Les Jones * Libor Jelinek * Litrik De Roy * Lukasz Milewski * Maarten Meijer * Madhu Samuel * Malick Wade * Manoj N Palat * Manuel Selva * Marc Dutoo * Marc Gille * Marcel Bruch * Marcel Gorri * Marcelo Mayworm * Marcelo Paternostro * Mariot Chauvin * Mark Melvin * Mark Phippard * Mark Powell * Markus Knauer * Markus Kohler * Markus Scheidgen * Markus Voelter * Martin Fluegge * Martin Lippert * Martin Oberhuber * Martin Taal * Marty Jones * Mat Booth * Mateusz Matela * Matthias Kempka * Maximilian Kögel * Meinte Boersma * Melanie Bats * Michael Jastram * Michael Scharf * Michael Spector * Michael Valenta * Michael Vorburger * Michaela Greiler * Mickael Istria * Mik Kersten * Mike Wilson * Miles Parker * Mitch Sonies * ModelBus * Mohsen Vakilian * Moritz Eysholdt * Moritz Post * Morten Christensen * Naci Dai * Ned Twigg * Neil Bartlett * Nick Boldt * Nicolas Richeton * Nikhil Nanivadekar * Niko Stotz * Nirav Thaker * Nirmal Sasidharan * Nitin Dahyabhai * Noopur Gupta * OSGi Alliance * Oisín Hurley * Olivier Thomann * Open Healthcare Framework * OpenNTF * Orion * Paolo Patierno * PapyrusUML * Pascal Rapicault * Patrick Paulin * Patrik Suzzi * Paul Bilnoski * Paul Buck * Paul Webster * Peter Friese * Peter Liu * Philip Wenig * Philipp Kursawe * Philippe Ombredanne * Platform Debug Team * Polarsys * Polishin' Eclipse * Prakash G.R. * R4E Development Team * RCP Testing Tool * RSE World * Radoslaw Urbas * Raja Kannappan * Ralf Sternberg * Ralf Zahn * Red Hat Developers * Remy Suen * Ricco Deutscher * Richard Gronback * Robert Gruendler * Robert Konigsberg * Rohan Kumar * Roland Grunberg * Ron Bermejo * Roxanne Joncas * Roy Ganor * Ruediger Herrmann * Samy Abou-Shama * Sandip Chitale * Sandro Boehme * Scott Kellicker * Scott Lewis * Scott Schram * Sebastian Benz * Sebastian Zarnekow * Serge Beauchamp * Seva Lapsha * Shaun Smith * Simon Chemouil * Simon Kaegi * Simon Maple * Simon Scholz * Simon Zambrovski * SoC Blog * Sopot Cela * Stefan Dimov * Stefan Leopold * Stefan Winkler * Stephan Herrmann * Stephane Begaudeau * Stephane Bouchet * Steve Northover * Suneth Vijayindu * Suresh Krishna * Susan McCourt * Sven Efftinge * Sébastien Gandon * Tanja Obradovic * Terry Chen * Thea Aldrich * Thibault Landre * Thomas Derflinger * Thomas ten Cate * Tillmann Seidel * Tim Buschtöns * Tom Schindl * Tom Schindl * Tom Seidel * Tomasz Wesolowski * Tonny Madsen * Torkild Ulvøy Resheim * Triquetrum project * Ugo Sangiorgi * Vasanth Dharmaraj * Vassiliy Tchoumatchenko * Vincent Hemery * Vincent Zurczak * Vineet Sinha * Virgil Dodson * Vladimir Piskarev * Vladimir Prus * Vojimir Golem * Wayne Beaton * William Piers * Wim Jongman * Wim Jongman * Zend Studio Team * Zoltan Ujhelyi * itemis * typefox.io * vert.x project ×Close ABOUT PLANET ECLIPSE Planet Eclipse is a window into the world, work and lives of Eclipse hackers and contributors. Looking for an RSS Newsreader? Try RSSOwl, it is built on Eclipse! Last updated: April 26, 2012 06:53 PM (UTC) Maintained by the Planet Eclipse admins. Powered by: Close ×Close ADD YOUR BLOG Want to become a Planet Eclipse author? To add your blog to the feed, please have a look at our guidelines and then open an issue or create a pull request with your feed-specific information. Close Back to the top SIGN UP TO OUR NEWSLETTER A fresh new issue delivered monthly ECLIPSE FOUNDATION * About Us * Contact Us * Donate * Governance * Logo and Artwork * Board of Directors LEGAL * Privacy Policy * Terms of Use * Copyright Agent * Eclipse Public License * Legal Resources USEFUL LINKS * Report a Bug * Documentation * How to Contribute * Mailing Lists * Forums * Marketplace OTHER * IDE and Tools * Community of Projects * Working Groups * Research@Eclipse * Service Status Copyright © Eclipse Foundation, Inc. All Rights Reserved. * * * * Back to the top