Archive

Although, many software packages claim to be perfect and bug free, the real world turns out to be different. Therefore, most software undergoes maintenance and will get better with respect to bugs and and (new) features by releasing newer software versions. Mostly it is avoided to break any compatibility with the older version to ease pains of migration for the users, or they provide clear and well described steps to migrate the software either manually or automatically. However, sometimes it is necessary to break some part of an API in order to significantly improve the software.

Recently, I have upgraded a Wicket 1.5.x implementation to Wicket 6.x and found out that some migration steps are very easy and some are even painful due to compatibility issues. Read more…

Amazon Relational Database Service (Amazon RDS) is a web service that makes it easy to set up, operate, and scale a relational database in the cloud. It enables people without almost any knowledge of databases to administer, for instance, MySQL databases. After running some time an MySQL RDS based database we discovered that standard installations of an RDS based on MySQL does not support the database triggers. This is mostly a rights/permissions issue, but changing the user privileges of the database user did NOT help. In fact, you get errors one not directly relates to the incapacity of the MySQL database in RDS to create the database triggers. Read more…

The Amazon Elastic Beanstalk provides quick deployment and management of applications in the AWS cloud. The beanstalk basically replaces the commonly known load-balancer and the web-application front-end servers while only one needs to manage the web-application. Additional scaling features can be easily management bijou only providing a minimum and maximum amount of servers one like to have operational.

Wicket is an web application framework that uses mark-up/logic separation, a POJO data model, and a refreshing lack of XML. This framework is particularly strong for usage in enterprise applications where state of the web session is important. Combined then can be a powerful tool, but be aware of the AWS Elastic Load Balancer. Read more…

Many developers already use a lot of open-source software in their development process. They mostly use libraries offered as open-source by developer groups, but some companies even offer their complete product as open-source. This all looks as one can use it for free and with any form of integration. However, most of those software package come with a software license similar as almost commercial software does. Only open-source software is by many considered ‘free’, but what is a free software license? A free software license grants recipients extensive rights to modify and redistribute, which would otherwise be prohibited by copyright law.

HISTORY

In the mid-1980s, the GNU project created for each of hist software packages a free software license. The first free license in history, the GCC General Public License, was applied to the GNU Compiler Collection and was initially published in 1987. The first BSD license dates to 1989 and was amongst the first free software licenses. In 1989, the first version of the GNU General Public License (GPL) was published, but within 2 years an updated Version 2 of the GPL (GPLv2) was released. GPLv2 went on to become the most widely used free software license. With the rise of the Internet to the public in the mid-90s and until the mid-00s, a new trend started where companies and projects wrote their own licenses, or adapting others’ licenses to insert their own name. From that point on also the complexity of licenses increased significantly due to incompatibilities. For instance, the GNU GPL version 2 license, has been brought to court, first in Germany and later in the USA. In the German case the judge did not explicitly discuss the validity of the GPL’s clauses but accepted that the GPL had to be adhered to “If the GPL were not agreed upon by the parties, defendant would notwithstanding lack the necessary rights to copy, distribute, and make the software ‘netfilter/iptables’ publicly available”, because the defendant did not comply with the GPL, it had to stop using the GPL-ed software. The US case (MySQL vs Progress) was settled before a verdict was arrived at, but at an initial hearing the judge “saw no reason” that the GPL would not be enforceable. After this, different groups promoting and defending specific software licenses started to exist.

SOME MAINSTREAM LICENSES

The following section provides a summary of well-known licenses and how they could be used effectively in commercial software.

NOTE: The following statements are guidelines, but for usage of software with a specific license is advised to search legal council as, for instance, this might also change per country’s law.

GPL [1]

The GNU General Public License (GNU GPL or simply GPL) is the most widely used free software license, originally written by Richard Stallman for the GNU Project. GPL is based on the copyleft license that derived works van only be distributed under the same license terms. Anyone using a software library with a GPL license must effectively assign the same GPL license to its final software product.
With the concept ‘copyleft’ an author surrenders some but not all rights under copyright law. Instead of allowing a work to fall completely into the public domain (where no ownership of copyright is claimed), copyleft allows an author to impose some restrictions on those who want to engage in activities that would more usually be reserved by the copyright holder. Under copyleft, derived works may be produced provided they are released under the compatible copyleft scheme.

BSD license [2]

The original BSD license was used for the Berkeley Software Distribution (BSD), a Unix-like operating system after which it is named. The license was initially written by the Regents of the University of California, because BSD was first written at the University of California, Berkeley.
The BSD license are a family of permissive free software licenses and software libraries with the BSD license allows proprietary use. Such a software library can be incorporated without enforcing the newly created software to be release under the same BSD license as GPL would have done. Therefore, works based on the software may be released under a proprietary license or as closed source software.

MIT License [3]

The MIT License is a permissive free software license originating at the Massachusetts Institute of Technology (MIT). The license allows reuse within proprietary software provided all copies of the licensed software include a copy of the MIT License terms. The resulting software that incorporates a library with a MIT license retains its proprietary nature even though it incorporates software under the MIT License. In short, all derived works require that the copyrights of the incorporated software is attributed, but may have a different license.
A well-know derived license is the XFree86 project that was the X-Windows system for Unix like operating systems.

Lesser GPL [4]

The GNU Lesser General Public License (LGPL) is created by the Free Software Foundation as a compromise between the strong-copyleft GNU General Public License (GPL) and permissive licenses such as the BSD licenses and the MIT License. The main difference between GPL and LPGL is that the latter allows software linked against LGPL software to be any other type of software license, but any derivative work of the LPGL-ed software falls under the LGPL license. Essentially, if you use the LGPL software you have the freedom to choose the license, but if you are modifying the software itself those changes must be published under LGPL.

Apache License [5]

The apache License is a free software license created by the Apache Software Foundation. This type of license allows users of the software the freedom to use the software for any purpose, to distribute it, to modify it, and to distribute modified versions of the software, under the terms of the license. But the Apache License does not require modified versions of the software to be distributed using the same license (in contrast to copyleft licenses), but in every licensed file, any original copyright, patent, trademark, and attribution notices in redistributed code must be preserved. In case a licensed file has been changed also a statement must be added that it is changed compared to the original licensed file.

Multi-License

This approach to licensing is used by commercial companies that like to have their product offered as open source. That way and most commonly done, commercial companies offer under an open source license the software to be used for free as long it is not for commercial usage. As soon the user would like to use the software commercially a different commercial license is applicable.

SUMMARY

When choosing open source software as components for your application it is important to realize the eventual use of the application. Is it commercially used or distributed are the main questions that impact the choice. Almost any software that is used commercially is better not to implement with GPL licensed software as you application is that also GPL and should be distributed as open source. Various other licenses, such as BSD, MIT, Apache or the LGPL license, have little impact on your choice of license of the new application and allow commercial usage.

Various websites use Google Maps to indicate a location on a map. In a simple way one can construct a link towards Google Maps via which a location is displayed. For instance, the following image provides an example.

Many Internet applications are built with Java technology and WebServices. Java is a programming language that is has a major characteristic of portability, ‘write one, run anywhere’. A Web service is a method of communication between two electronic devices over a network to support interoperability. Their combination is ideal for integrating different systems or building distributed applications.

SAP is a major enterprise resource planning system designed to coördinate the resources, information, and activities that are part of business processes such as stock management or billing. The architecture of SAP is based the three-tier client/server model with the layers:

Presentation server (GUI)

Application server

Database server.

This layering enables all kinds of applications at the GUI level that can range from desktop applications to web shops. Recently, I was involved of implementing a user interface for SAP that implemented a register for a chain of stores that supported sales and their stock-management.

Connecting SAP with a WebService to a Java based application seems straight forward with WebServices. At the SAP server-side one implements a WebService and generates the WSDL. However, interoperability and challenges came along the way. Oddly enough, some Googling or searching in the SAP developers forums resulting in no useful information about interoperability of SAP and WebServices frameworks. Therefore, the following provides some lessons learned with a few WebService frameworks.

Apache Axis

Apache Axis version 1 is a rather old, but well used WebServices framework. When Axis was used as the client for the SAP implemented WebService it was found that the WSDL generated by SAP was not compatible.
The main problem was that the code generator of Axis could not parse the targetNameSpace of “urn:sap-com:document:sap:soap:functions:mc-style”.

Metro WebServices framework

Metro is a well-known WebServices framework provided by Oracle (previously SUN). Connecting a Metro based client to SAP implemented Web Services raised some problems. At the moment Metro wanted to connect to the server-side and verify first the WSDL. The URL used to provide the WSDL for a WebService turned out to be non-standard resulting in a mismatch and failure to retrieve the WSDL by a Metro client.

Apache CXF

This package results in a correct interoperable implementation where SAP WebServices can be used in combination with a Java based WebServices framework. The implementation interface of CXF is rather close to Apache Axis 1 and ‘simple’.

Summary

Connecting a Java based web application to SAP can be done with the dedicated Java connectors provided by SAP, but also the communication can be done with WebServices. The use of WebServices did not provide the expected interoperability with any kind of framework, but only good results were booked with Apache CXF.

Potentially, the interoperability can be improved by defining first the WSDL and then generate both side SAP server-side and Java based client side. However, this was not attempted.

The Elastic Compute Cloud (EC2) of Amazon offers flexible scaling for your services. It provides you with a ‘self-owned’ host in the cloud over which you can have full-control by selecting the operating system and ability to configure its applications/services.

The hostname of those hosts are not logically providing its functions. All the hostnames in the EC2 cloud become of the format ec2-AA-BB-CC-DD.compute-1.amazonaws.com where a more human friendly name for its purpose may be better. Just like an IP address alone no ones really links that name to the purpose of some system, but when a database server would called db.amazonaws.com it makes the purpose of the easier to get. This would neither be possible as names in the same domain must be unique. Dynamic DNS could assist you here if you can insert the EC2 instances in your own domain name, for instance, db.mydomain.example.

In order to provide your hosts in the cloud with logical names, all you must have is a Dynamic-DNS enabled domain name and you need to setup and configure a Dynamic DNS client.

Step 1: Enable your domain name service with Dynamic DNS. For instance, you can register an account in a public service (DynDNS) that enables Dynamic DNS under their name service.

Step 2: Setup a hostname within the Dynamic DNS system. For instance, you can register a dynamically named host the domain of the public service of DynDNS.

Step 3: Install a Dynamic DNS client that connects to the name service. For instance, you can install ddclient at your host.

Step 4: Configure the Dynamic DNS client. For instance, DynDNS has even very nice option to generate the configuration of ddclient for you.

Step 5: Start the Dynamic DNS client that connects to the name service.