From the blog

Start your IoT solution with RAD Studio 10.4

Let’s say for example that you want to create a heart rate monitor app. You’ll need information about the heart rate GATT profile to connect to and collect data from the bluetooth enabled HR monitor device. GATT profiles are high level definitions that define how to use standard services in your applications. The heart rate GATT profile is used for fitness or health applications. The server device with a heart rate sensor exposes the standard heart rate service so that the Bluetooth LE client discovers the service and starts collecting data, for example the bpm (beats per minute). The GATT profile is the combination of service + characteristics. You could research all of these specifications on your own, or you could skip ahead by using our prebuilt IoT heart rate sensor component.  IoT Solution with RAD Studio 10.4, we not only provide  Bluetooth components out of the box, but also offer over 50 prebuilt IoT device components for many popular devices, ranging from home automation, to fitness gadgets, medical devices, environmental sensors and more. They are downloadable via the GetIt Package Manager in RAD Studio 10.4 Sydney (Tools > GetIt Package Manager) and include both BLE and Z-Wave components. For example, you can quickly build your own fitness application using either the generic ThingConnect heart rate service component or a device specific IoT component. We provide ready-to-use sample apps for each of the IoT components in GetIt.   The IoT framework for Bluetooth LE based devices uses TBluetoothDeviceDiscoveryManager to manage the connection with an IoT device as a general Bluetooth LE based connection mechanism and wraps each device as a component. For instance, the TWahooTICKRHeartRateMonitor component wraps the Wahoo TICKR Heart Rate Monitor. The TBluetoothDeviceDiscoveryManager component provides the basic mechanism for connecting to Bluetooth LE based devices. In the TBluetoothDeviceDiscoveryManager component, you can define timeout and a number of re-tries to connect for these devices. To build a ThingConnect application, you need the following components: The TBluetoothDeviceDiscoveryManager component is used to set up the connection with the device. The corresponding ThingConnect device component is used to retrieve the services and the characteristics data from the device. Using the TPolarHeartRateMonitor component, it’s easy to connect to the Polar H7 heart rate sensor, and start monitoring the Heart Rate service, including subscribing to HR measurement data updates, and retrieving the building sensor location. You can find a step-by-step tutorial on how to build your own heart rate tracking application using RAD Studio here. IoT Solution With RAD Studio 10.4, we provide fully customizable user interface templates. Using one of the FireMonkey UI templates provides a great starting point for building a visually stunning fitness application. Shown: FireMonkey UI template – Home Screen 3, available in GetIt.  

Read More

InterBase 2020 Update 1 deja disponibil

InterBase is a powerful, zero-administration, small footprint database engine that can power your server and even run on your mobile devices as an embedded database. InterBase 2020 Update 1 added a number of new features, including tablespaces support for InterBase server, new OS platform support for embedded versions, enhanced performance monitoring, SQL optimizations and more.  Today Embarcadero is releasing InterBase 2020 Update 1, which adds the following features:  Linux support for InterBase 2020 Server and Developer Editions Tablespaces support for the OnlineDump technology Updated IBConsole support for Backup, Dump, and Restore operations of databases that use tablespaces Performances improvements and fixes for defects reported by customers Here are some additional links: https://www.embarcadero.com/products/interbase/version-history http://docwiki.embarcadero.com/InterBase/2020/en/Main_Page http://docwiki.embarcadero.com/InterBase/2020/en/What%27s_New_in_InterBase_2020_Update_1 The installers for different platforms are available for download on the following trial and developer edition download pages: https://www.embarcadero.com/products/interbase/start-for-free https://www.embarcadero.com/products/interbase/developer/free-download This release continues to extend the power of InterBase 2020, along with continuing to focus on its reliability and stability. Moreover, RAD Studio developers already have an InterBase developer edition license and also the ability to distributing IBLite or IBToGo with their mobile applications, depending if they are on the Professional or Enterprise edition SQL Optimizations Transform inequality operators and not operators to their opposite representation for index based retrieval. Inequality operators, such as <, <=, !=, <>, >, >= can be transformed and optimized. For e.g. Conditions of the form “NOT A>0” can now get transformed to “A <= 0” by the SQL optimizer to use index retrieval for better performance. Security Enhancements InterBase 2020 uses OpenSSL 1.0.2s across all platforms to avail recent vulnerability fixes from OpenSSL project. IBConsole Improvements InterBase 2020 comes with an enhanced IBConsole GUI for Windows. It supports the latest feature set including Tablespaces and Data Dictionary modifications and includes enhanced support for InterBase’s patented Change Views functionality. InterBase 64-bit Edition now includes a 64-bit native IBConsole application, that will allow larger datasets to be retrieved in the query window. Phased Delivery InterBase 2020 embedded versions and InterBase Server Edition for Windows are immediately available. Server editions for Linux and macOS will follow shortly.

Read More

Getting Started with InterBase for RAD Users

Most, if not all, of your applications will connect to some database backend.  For Delphi and C++Builder users, most have either used it previously or have heard of it. InterBase is a zero admin, small footprint database engine that offers enterprise grade database capabilities like granular transparent database encryption, powerful access control, point-in-time recovery and patented data change tracking. It’s the database running across a range of industries, from POS systems to medical laboratories and CRM to railway systems. In fact, even RAD Server uses an InterBase database for the storage of user information, user groups, analytics, registered devices, version information, registered Edge Modules, push notification messages and more. So why not see if it can further your development efforts. What’s to lose? It’s included in your RAD Studio license. How do I use InterBase for RAD Development? All versions of RAD Studio/Delphi/C++Builder come with support for InterBase 2020 databases. InterBase 2020 is installed with RAD Studio in the following directory: C:\Program Files (x86)\Embarcadero\Studio\20.0\InterBase2020 Installing and Starting the InterBase Server In the additional options of the web installer for RAD Studio, check and install the InterBase Developer Edition and InterBase Express Components. InterBase 2020 Developer Edition is installed with RAD Studio, Delphi or C++Builder and is in the RAD Studio integrated license. Choose Start | Programs | Embarcadero InterBase 2020 | 64-bit/32-bit instance = gds_db | InterBase Server Manager [instance = gds_db] On the InterBase 2020 64 Server Manager, start the InterBase server if it is not running Connecting to InterBase Connecting to the server and database will require entering the host, port, database user and password. InterBase databases are defaulted to the port 3050 or 3051 and provide the default system administrator user, SYSDBA (not case-sensitive) with a password of masterkey (all lowercase). Note: It is recommended that you change the SYSDBA password for improved security. IBConsole IBConsole is a simple, yet powerful and complete system for managing InterBase servers and databases. IBConsole lets you look into the details of the database structure, query the data, backup and restore the database, and perform any other admin tasks.  For more on what IBConsole can do, click here Command Line isql tool The command-line isql is a utility for processing SQL data definition (DDL) and data manipulation (DML) statements from interactive input or from a source file. It enables you to create and view metadata, add and modify data, grant user permissions, test queries, and perform database administration tasks. For more on invoking isql, click here. Developing Database Applications Delphi includes many components for accessing databases and representing the information they contain. They are typically grouped by their access mechanism. The two recommended data access components are: FireDAC FireDAC is the set of standard data-access and data-aware visual components for developing with various database systems including InterBase. FireDAC is designed to deal with real-world high load applications and enables the developer to concentrate on developing the application, not on the complexities of database interaction InterBase Express InterBase Express components or IBX, is a set of custom data aware components and controls that allow you to connect to and access data from InterBase servers and databases. Applications built using IBX components should work better and faster (even if only marginally), giving you more control over the specific features of the server.  The components are broken down into two sections, the IBX Dataset components and Administrative Components.  Using IBLite and InterBase […]

Read More

GetIt Package Manager

GetIt Package Manager Enhancements Coming in RAD Studio 10.4 RAD Studio has a light weight package manager, a mechanism for downloading additional product features, add-on libraries and components, demos, VCL and FMX styles and more. Some of the content is provided by Embarcadero, but a lot comes from our community of developers and third-party vendors. Now in the coming 10.4 release of Delphi and C++Builder, the GetIt Package manager is going to see significant changes in 10.4. The key addition is that now each entry has an associated release date, technically a timestamp. This is the foundation of different features: the ability of sorting the list of entries by date, seeing the most recent ones on top for each entry you have already installed, the indication that an updated version is available the ability to list all installed entries that have an update available Updated Filters In terms of UI change, the Filter section of the GetIt dialog UI will be modified: We are removing older, inactive filters (like Free and Paid) and keeping 2 options offering 2 new ones: All for all entries Installed for the packages installed on the current system Subscription only is a new filter for exclusive content published by Embarcadero and limited to customers with an active update subscription license Updates lists packages installed on the current system and for which a new release is available (that is a package with a newer timestamp than the installed version timestamp) This is the updates filter in action: Another change is in the Sort By section of the GetIt Dialog box, which is going to have a new option to sort packages by release date (or timestamp). GetIt Entries UI The UI of the individual entry in the GetIt dialog will also be modified to indicate the specific date the package was published and (eventually) the date you installed that package. Depending on the status, the entry UI includes new buttons for the action(s) — there are now more actions available, including Updating a package. Here you can see the standard UI for an entry and the same after the package has been installed and an update has been made available: Notice that the two dates indicated in the last image are the release date of the last update and the release date of the one currently installed (the timestamp of the installed item, not the date it was installed). RAD Studio Patches Another key feature we are enabling in 10.4 is the ability to use GetIt to distribute patches, with a specific way to alert customers that a patch is available. We’ve added a new section to the Welcome page to indicate when a patch is available and you have not installed it: Once installed, that indication will disappear. Combined to this Welcome page hint, we’ll have a new category in the GetIt package manager for patches. But this is not the only related change. We have technically introduced a deferred installation mode, so that a patch requiring to update files used by the RAD Studio IDE itself can be installed by a separate process once you close RAD Studio (or as you restart it). This will account for the installation of more complex patches, that require you to close RAD Studio first. Additional GetIt Features Beside the features […]

Read More

TMS WEB Core for Visual Studio Code

TMS WEB Core for Visual Studio Code beta is ready for TMS ALL-ACCESS users. On July 26, 2018, we released the first version of TMS WEB Core for the Delphi IDE, hereby offering a RADically new way for creating web applications directly from the Delphi IDE. RADically different because TMS WEB Core offers RAD component based rich web client application development thanks to the technology of compiling the Object Pascal code to JavaScript with the pas2js compiler. The next step was to also enable using TMS WEB Core from the Lazarus IDE with the first version introduced in October 2018. At the same time, TMS WEB Core was extended with support for creating PWA’s, which is progressive web applications, meaning web applications that can be installed on mobile devices or Chrome desktop browsers, run offline, and access several parts of the device hardware. In a later step, February 2019, we announced support for creating cross-platform desktop applications via the Electron framework. On November 15, 2019, we unveiled that TMS WEB Core was also coming to Visual Studio Code. And now, today, after a huge amount of intensive work, we feel confident to give our baby in the hands of TMS ALL-ACCESS users. It took more time than expected to reach this level as the challenges turned out to be quite complex. Challenges we couldn’t have coped without having the absolute best engineers on board. In the first place, José Leon Serna, the architect of the IDE integration into Visual Studio Code, Roman Kassebaum overlooking and ensuring the Visual Studio Code integration works on 3 operating systems and remains compatible with Delphi’s project management, the pas2js compiler team assisting with debugging integration, the framework team itself taking up the huge task for making the UI controls all design-time editable. Let’s go back to the WHY of taking up this huge & challenging task. Before embarking on this project, José Leon Serna, former Embarcadero IDE architect and head of the engineering team in Spain, and myself mutually shared the vision that Visual Studio Code offered a couple of unique technical features that could potentially make it an ideal candidate for using it for TMS WEB Core web client development. Visual Studio Code is based on web technology. Visual Studio Code is an Electron application and internally, everything is rendered via web views. This makes it ideal to offer design-time live rendering of the forms designed by TMS WEB Core. This is the primary driver. But there are nice additional benefits coming with Visual Studio Code. So, in a nutshell, key decision factors for our endeavour were: Based on web technology, offers a live web rendered designer form Is cross-platform, Visual Studio Code can be used on Windows, macOS, Linux Designed to be extended via plugins with seamless plugin ‘marketplace’ distribution A powerful established Pascal code editing plugin OmniPascal is already available It is a high-DPI compliant IDE Features built-in mechanisms for debugging of applications running in a browser It features side-by-side editing, multi-view code editor windows that can be freely arranged It has a very low barrier of entry, as Visual Studio Code itself is free and open-source Just like our support for Lazarus adds freedom of choice, the capability to use Visual Studio Code now is extra freedom of choice. Of course, this won’t stop nor influence our plans for TMS WEB Core for Delphi. Version 1.4 of TMS WEB Core […]

Read More

Nou în Delphi 10.4: Redesigned Code Insight

What do we mean by Code Insight? First, some background. If you’re familiar with Code Insight, skip ahead… Code Insight is our name for a set of IDE productivity features in the editor. For the purposes of this blog post, those features are: Code Completion: the dropdown list box that predicts what you want to type. Appears when you type a period (.) after an identifier, or when you press Ctrl+Space. Parameter Completion: the hint that appears showing the parameters for a method, including multiple variations for an overloaded method. Ctrl+Shift+Space inside method braces (). Find Declaration: right-click on an identifier and click Find Declaration, and it will take you to where that method, variable, type etc is defined. You can also hold Control down and move your mouse over the editor, and applicable identifiers will turn into hyperlinks you can click on to find their declaration, which is known as Code Browsing. Tooltip Insight: hover your mouse over a variable or type, and you will be shown information about it. Sometimes this includes XMLDoc, and is known as Help Insight. (We need to clarify names in our doc.) Error Insight: displays errors in your code before you compile. These are otherwise known as ‘red squigglies’, many people’s preferred terminology – the red zigzag lines under your code. Errors are also shown in the Errors node in the Structure view. These features have been available in Delphi for many years. Features like this are a key benefit to you when coding an IDE. Code completion especially saves a lot of typing, and error insight helps you make sure your code is working before you spend time compiling. Classic Code Insight As the language has grown and time has passed, these features have no longer always worked as well as we have wanted. The technology was cutting-edge when it was introduced, but there were definite improvements we could make today. It’s been common to see bug reports about spurious errors (ie errors reported in the editor or in the Structure view when the source code is actually perfectly correct code.) Or that the IDE worked in the main thread, so would not respond to keystrokes while it was working to show the code completion list. (You could only press Escape to cancel.) Sometimes, for gigantic projects, calculating the data for code completion could use a lot of memory in the IDE. In addition, the features were implemented with multiple code parsers: code completion and error insight each had a different understanding of the code. And finally, code insight was disabled while debugging, so if you wrote code while debugging you had no productivity assistance. We did not want this to continue. Our goals for 10.4 have been to: Make Code Insight asynchronous – that is, run on another thread or in another process (or both) so that the IDE is always responsive when you type even if it’s doing work in the background Reduce or even completely remove (you can see where this is going) the potential memory usage for code completion from the IDE Ensure Error Insight always gives correct results – that is, it should give exactly the errors the compiler would, and correct code should show no errors Help us move closer to having a single parser for Delphi source in the IDE, so that there is a ‘single source of truth’ or single understanding […]

Read More

Nou în Delphi 10.4 – Custom Managed Records

What is a Custom Managed Record in Delphi? Records in Delphi can have fields of any data type. When a record has plain (non-managed) fields, like numeric or other enumerated values there isn’t much to do for the compiler. Creating and disposing the record consists of allocating memory or getting rid of the memory location. (Notice that by default Delphi does not zero-initialize records.) If a record has a field of a type managed by the compiler (like a string or an interface), the compiler needs to inject extra code to manage the initialization or finalization. A string, for example, is reference counted so when the record goes out of scope the string inside the record needs to have its reference count decreased, which might lead to de-allocating the memory for the string. Therefore, when you are using such a managed record in a section of the code, the compiler automatically adds a try-finally block around that code, and makes sure the data is cleared even in case of an exception. This has been the case for a long time. In other words, managed records have been part of the Delphi language. Records with Initialize and Finalize Operators  Now in Delphi 10.4 record type supports custom initialization and finalization, beyond the default operations the compiler does for managed records. You can declare a record with custom initialization and finalization code regardless of the data type of its fields, and you can write such custom initialization and finalization code. This is achieved by adding specific, new operators to the record type (you can have one without the other if you want).Below is a simple code snippet: type TMyRecord = record Value: Integer; class operator Initialize (out Dest: TMyRecord); class operator Finalize(var Dest: TMyRecord); end; You need to write the code for the two class methods, of course, for example logging their execution or initializing the record value — here we are also logging a reference to memory location, to see which record is performing each individual operation: class operator TMyRecord.Initialize (out Dest: TMyRecord); begin Dest.Value := 10; Log(‘created’ + IntToHex (Integer(Pointer(@Dest))))); end; class operator TMyRecord.Finalize(var Dest: TMyRecord); begin Log(‘destroyed’ + IntToHex (Integer(Pointer(@Dest))))); end; The huge difference between this construction mechanism and what was previously available for records is the automatic invocation. If you write something like the code below, you can invoke both the initializer and the finalizer, and end up with a try-finally block generated by the compiler for your managed record instance. procedure LocalVarTest; var my1: TMyRecord; begin Log (my1.Value.ToString); end; With this code you’ll get a log like: created 0019F2A8 10 destroyed 0019F2A8 Another scenario is the use of inline variables, like in: begin var t: TMyRecord; Log(t.Value.ToString); which gets you the same sequence in the log.  The Assign Operator The := assignment flatly copies all of the data of the record fields. While this is a reasonable default, when you have custom data fields and custom initialization you might want to change this behavior. This is why for Custom Managed Records you can also define an assignment operator. The new operator is invoked with the := syntax, but defined as Assign: class operator Assign (var Dest: TMyRecord; const [ref] Src: TMyRecord); The operator definition must follow very precise rules, including having the first parameter as a reference […]

Read More

Nou în RAD Studio 10.4 VCL Per-Control Styles

In the past, the VCL library allowed a developer to select one style (or no style) for the entire application. Starting with RAD Studio 10.4 VCL library will allow you to use multiple VCL styles at the same time in different forms of your applications, or even different controls of the same form. You can also mixed styles of elements (controls and form) and elements using the Windows default platform theme. This feature is controlled by a new StyleName property for the TControl class. This property takes as value the name of one of the styles active for the application and applies the style to the given control. If the property is empty, the parent control style is used: so if you set the property for a form, all controls in the form take the form style by default. A Quick Demo As the name implies, per-control styling allows a developer to apply different styles for controls and forms in the same application. To start, you need to add multiple styles to an application, and you can use all of them. This feature works only if one of the VCL Styles is active. First, add multiple styles to an app (hint, in RAD Studio 10.4 VCL you can use the new high-dpi styles, that’s for another blog post): Now set different styles names for different controls in a form, like in the following DFM file (I kept only key relevant properties here): object Form2: TForm2  StyleName = ‘Sky’  object Panel1: TPanel    StyleName = ‘Light’    object Button1: TButton…    object Button3: TButton      StyleName = ‘Sky’    end  end  object Button2: TButton    StyleName = ‘Windows’  end  object Button4: TButton    StyleName = ‘Luna’  end  object Button5: TButton    StyleName = ‘Aqua Graphite’  endend Notice that Button1 takes the hosting panel style, while Button2 resets the style to the form one. Finally, ‘Windows’ is a special purpose value, as described below. With this code, here is the UI of a form with 5 buttons using 5 different styles: A Few Rules for RAD Studio 10.4 VCL There are different approaches you can use to to adjust the style of the different forms and controls of a VCL application: 1. Adjust style list in project options (but you can also load styles at runtime). 2. Use the TControl.StyleName property to define the specific style for each control or each form. The StyleName value must be one of the names of the styles in the project options. A control can use the StyleName defined for its parent control, so you can set the StyleName property of a form to have specific style used by all controls on it. Additional cases: By default, TControl.StyleName is empty and control uses a default style. You can set StyleName as ‘Windows’ to disable applying any style for control or form. If you set a style name that is not among the loaded VCL styles, then the control will use default style. 3. You can define a specific style also for common dialogs. Use the property  TStyleManager.DialogsStyleName for that. By default, it is empty and common dialogs use the default style of the application. 4. You can define the application style as ‘Windows’. This means that if some control or form has an empty StyleName property, then it will always use ‘Windows’ style and VCL Style will be always […]

Read More

RAD Studio 10.4 With New VCL TEdgeBrowser Component

RAD Studio 10.4 is going to bring support for working with web content through a new Chromium-based Edge browser control in VCL applications. The new TEdgeBrowser component wraps the Microsoft WebView2 component. TEdgeBrowser supersedes TWebBrowser, which uses the Internet Explorer WebBrowser browser control. However, TWebBrowser remains in the VCL component set, with some notable changes (see below). TEdgeBrowser Requirements Because TWebBrowser uses the Operating System-supplied Internet Explorer WebBrowser browser control there is no preparation required – it will work wherever Windows has the Internet Explorer control available. On the contrary, Microsoft Edge is not an Operating System component (not yet, anyway). Also, it is still not officially released. Because of this, you need to ensure that these items are installed on your computer before you can run an application that uses it: The Microsoft Edge Chromium-based browser is currently available from https://www.microsoftedgeinsider.com/download (Canary channel version whilst the WebView2 SDK is in pre-release).  The WebView2 control, currently available through NuGet at https://www.nuget.org/packages/Microsoft.Web.WebView2 or via a matching GetIt package manager For the time being, Edge Canary is requirement applies to you compiling and executing the application on your development machine and also on the end user’s machine. As for the WebView2, all you need id a DLL that currently needs to be distributed along with your program. Both are Microsoft requirements and binaries, and they might change with the official release. Once you have installed Edge (Canary version) to install the required Microsoft WebView2 package you open the GetIt package manager window in the RAD Studio 10.4 IDE and search for the corresponding entry, as indicated below: Once you have installed the package, it will copy in your RAD Studio redistributable folder the DLL required by your application, one for 32-bit apps and one for 64-bit apps (both are called WebView2Loader.dll). You will need to copy this DLLs in your build target folders or someone on the search path. Using the Edge Browser component You use the TEdgeBrowser component in much the same way as you would use a TWebBrowser, indeed a number of methods and properties are similar to those of TWebBrowser’s methods and properties. Drop the component on a VCL form and size it as appropriate, as in the simple case below: To navigate to a URL simply pass that URL to the Navigate method: EdgeBrowser1.Navigate(‘https://www.embarcadero.com’); That’s all, run the application and you see the following output: And What About TWebBrowser? The VCL TWebBrowser component still performs the same job as always, which is to render web content using the Internet Explorer WebBrowser browser control. However, in addition to this default behavior it has a new property, SelectedEngine, which can be used to ask it to use the newer Edge (Chromium) WebView2 browser control instead if available on the target machine.  The advantage is to have a single browser control that can work on all Windows computers, and also a higher level of compatibility (in terms of browser component of methods and properties used) with the existing code. The advantage of the new Edge control is you have more power to customize this new engine.

Read More

OpenJDK for Android in Delphi Development

You may not know this, but Java comes in many flavors and parts. After Oracle acquired Sun Microsystems, they became the official owner of the Java trademark and the main “official” Java distributions. First off a disclaimer: I’m not a lawyer, nor am I a Java developer. This is a high-level overview of a number of complex issues related to Java, Java development, and licensing. My goal is to give you enough information to move forward and be successful, but I encourage you to do some additional research and consult a lawyer if you need additional information. I know that I will miss details and gloss over important points. Java is made up of the following parts JVM: The Java Virtual Machine is the virtual machine that runs all Java applets. Java applets are usually distributed as Java bytecode in a JAR file. Java bytecode doesn’t run natively on the physical computer. Instead, it runs on the JVM. The JVM is a Just-in-Time compiler (JIT) that converts the Java bytecode into native machine code. The two popular flavors of the JVM are Hotspot (the official JVM used by the Oracle JDK) and OpenJ9. Technically Android doesn’t have a JVM. Instead, the Java bytecode is converted into Dalvik bytecode and run on the DVM (Dalvik Virtual Machine) or compiled by ART (Android Runtime). Both use .dex files, but ART translates the bytecode into .elf (Executable and Linkable Format) files. This article is mostly focused on the Java desktop side for building Android apps with Delphi, but I wanted to add this aside for clarity. JRE: The Java Runtime Environment contains the main libraries a Java applet needs to run, along with the JVM. It includes Java.exe and Javaw.exe that run the applets and other utilities. JDK: The Java Development Kit, or the SDK for Java development. The JDK is a superset of the JRE. This is what you use for building Java (and Android) applications, while it also provides everything you need to run Java applets. It includes a number of utilities like KeyTool.exe and JarSigner.exe used to make  There are 3 variants of the Java platform released by Oracle: Standard Edition (Java SE), Enterprise Edition (Java EE), and Micro Edition (Java ME). This blog post, and most use cases you will encounter, involve the Standard Edition. Where it gets interesting is with the OpenJDK, a free and open-source implementation of the Java Standard Edition (SE) Platform. It is the official reference implementation of Java SE since version 7. The source implementation is licensed under the GNU General Public License version 2 with a linking exception. [wikipedia] Similar to how Chrome is based on the open-source Chromium project, Java SE is based on OpenJDK. Anyone, yourself included, could download the OpenJDK source files and create a binary build. There are a number of organizations that do that, and each one has its own spin on licensing, support, and included components. Here are a few (these are binary distributions of the OpenJDK source). Build Long TermSupport PermissiveLicense Pure Commercial Support AdoptOpenJDK / JClarity / IBM Java SDK Yes Yes Optional Yes Alibaba Dragonwell Yes Yes No Yes Amazon Corretto Yes Yes No No Azul Zulu Yes Yes No Yes BellSoft Liberica JDK Yes Yes No Yes ojdkbuild Yes Yes Yes No Oracle Java SE Yes No No Yes Oracle OpenJDK No Yes […]

Read More