---
# System prepended metadata

title: Essay 1

---

# Essay 1
{{<image file="libgdx-logo.png">}}

libGDX is a free, open source cross-platform Java game development framework based on OpenGL. As a main principle this framework provides developers the opportunity for fast prototyping and iterations when working on a video game given its cross-platform nature. libGDX realises these benefits for the developer by offering a single API, which targets many different platforms[^libgdx]. This single API that is provided to the developer, makes it much easier to maintain an application.

In this blog one can read about the domain specification, the main capabilities, context, and ethics surrounding the libGDX framework.

## Domain Specification
The primary domain element in the scope of the libGDX project is video game development from a developer's perspective. This does not only involve the actual programming of the game, but also the maintenance and deployment of the final product across many different platforms with ease. On overall, game development is simplified for the developer by the libGDX framework. This simplification for the developer is mainly achieved by the single API offered by libGDX which works cross-platform.

Another important domain concept of libGDX is that video game developers are provided with clear and complete documentation on how to use this framework. This documentation ranges from how to set up and use the libGDX project for development, to a full tutorial on implementing a simple video game, or even how to contribute to libGDX itself. 

Another domain concept of libGDX seems to be that not only developers can use this framework to develop their games, but that there are also open source games created with this framework which every developer could contribute to. Even the libGDX framework itself is open source, like mentioned in the introduction. This gives developers the opportunity to contribute to the project, while improving their own knowledge and skills.

## Main Capabilities

libGDX houses a powerful cross-platform implementation (as can be seen in the figure below[^libgdxbook]). Currently the following platforms are included: Windows, Android, iOS, Linux, MacOS, HTML5, and even Blackberry[^libgdx]. The key feature of using libGDX to handle cross-platform interaction is that all the code works with a single API. Each platform only requires a small launcher setup and in some cases some platform-specific code. The Google Login API, for example, has a different implementation requirement on Windows versus Android. 

{{<image file="cross-platform.jpg" caption="Cross Platform implementation of libGDX">}}

libGDX is a powerful engine, and its community allows it to be well developed[^libgdxcommunity]. The community hosts special "game jam" events in which programmers are encouraged to create a game from scratch with a given topic and in a given time period[^libgdxjam]. Creating games is the end goal of the libGDX engine. However, the community also provides tools to accomodate correct implementation of certain features. Applications that are made to solve particular difficulties within the libGDX framework are, for example, Spine[^spine], and Tiled[^tiled]. 

The thriving community can be seen in a project labeled "Awesome libGDX", it houses links to information regarding a vast list of features, documentation, and implementations[^awesomelibgdx]. 

{{<image file="awesome-libgdx.png" caption="Awesome libGDX Logo">}}

libGDX contains numerous features that are commonly required for game development. On their website they list the following features[^libgdxfeatures]:
- Audio,
- Input handling,
- Graphics,
- Math & Physics,
- Service integration,
- File handling,
- Networking

## Context

As an application framework, libGDX needs to provide a stable foundation for its users (the applications), while supporting as many different backends as its supported platforms require. A large part of this is solved by using the Java platform, which, as a programming language and application platform has similar goals. Other platforms, such as iOS and web browsers, require specialized tools to compile and run libGDX-based applications. libGDX needs to provide a way to initialize these environments.

Platform support is larger than a simple programming language runtime: each platform has its own set of interfaces for graphics, audio, input, storage, networking and more. These interfaces constantly evolve or are replaced by improved versions, requiring libGDX to continuously adapt its translation layer. In the next blog posts we will dive deeper into how libGDX achieves that goal.

A project like libGDX has many different stakeholders that all interact with libGDX in their own way. First and foremost there are the developers that choose to use libGDX as their game development framework of choice. These developers rely on the fact that the system fulfills its promises and is reliable to use. The end-user will then suffer the consequences when a game developed in libGDX does not perform as advertised.

On the front end, the framework needs to be suitable for everyone involved in the creation of games or similar applications. Not only the aforementioned developers, but also artists and other contributors. Modelers should be able to use their tools of preference to build meshes and textures that can be used in the engine, while for the audio engineers it should be possible to deliver audio in their preferred format. libGDX provides either support for common formats or tools that convert these formats into those that are natively supported.

libGDX is not the only engine with this goal. Other engines include Unity, Monogame, and jMonkeyEngine, which provide similar portability and functionality. Especially Unity is a popular alternative. For libGDX to attract users, some of whom will become contributors or possibly even maintainers, it must propose greater value than its alternatives. In the case of libGDX this value lies in the flexibility: it is a framework and not a game engine. Users have more freedom in terms of what kind of application they build and how to structure it.

This flexibility does come at a cost. Whereas other engines provide a full development environment that supports the entire game development process. libGDX does not have such official tooling, which means that it is also up to the programmers to support the rest of the team in this regard. However, it gives the team much more freedom to set up their own development process.

The environment libGDX is in is constantly in flux. With new or changing platforms, backends and development practices, libGDX has to continuously adapt. On desktop, a switch from LWJGL2 to LWJGL3 was fairly recently made[^libgdxlwjgl3], while on iOS the developers were currently looking into using a different runtime than RoboVM, for which official support ended in 2017, but abandoned this in favor of a fork of RoboVM[^libgdxstatusreports].

Other than that, there are no major pending changes on their roadmap[^libgdxroadmap]. This indicates that libGDX itself is largely stable in terms of features. The team regularly publishes status reports with short-term plans, mostly related to maintenance.


## Ethics

Ethically speaking, there seem not to be big issues surrounding the libGDX project. As libGDX serves only as a development framework, it is up to the developer that makes use of this framework to develop an ethically responsible application. An important element to think about when reviewing this framework from an ethical perspective, is that it is open-source as earlier mentioned.

With the open-source nature of libGDX, it provides transparency to the world. This makes it clear which types of decisions were made in the development of the framework. 

Next to transparency that the open-source nature of libGDX provides, also more options are given for collaboration and self development, mainly for software developers. As every developer is allowed to make contributions to the libGDX framework, they are able to learn from the contributions they make and to improve their programming skills.


## Conclusion
libGDX is a free, open source cross-platform game development framework that as a main domain focus tries to allow game development from a developer's perspective while being well-documented and easy to contribute to. It works on many different platforms and on top of that is feature rich with a large community that gives the possibility for libGDX focussed game jams and other events. Developers form the biggest group of stakeholders in regards of this project, as they may use the framework to develop their applications.

There reside no serious ethical issues in the libGDX project. The project facilitates the development of games and other applications, which are largely uncontroversial, depending on the developed application. With its transparent implementation, the platform can easily be utilized and improved and individuals can learn from this project. It is also the case that the different important decisions that were made in the development of the framework are visible to the world due to this transparent implementation.


## References

[^libgdx]: libGDX. (n.d.). libGDX. Retrieved February 17, 2021, from https://libgdx.com/
[^libgdxcommunity]: libGDX. (n.d.). Community. Retrieved February 19, 2021, from https://libgdx.com/community/
[^libgdxjam]: libGDX. (n.d.). Game Jams. Retrieved February 19, 2021, from https://libgdx.com/community/jams/
[^spine]: Spined. (n.d.). Spined. Retrieved February 19, 2021, from http://esotericsoftware.com/
[^tiled]: Tiled. (n.d.). Tiled. Retrieved February 19, 2021, from https://www.mapeditor.org/
[^awesomelibgdx]: Awesome libGDX. (n.d.). Awesome libGDX. Retrieved February 10, 2021, from https://github.com/rafaskb/awesome-libgdx#readme
[^libgdxgithub]: libgdx/libgdx. (n.d.). GitHub. Retrieved February 21, 2021, from https://github.com/libgdx/libgdx
[^apachelicense]: Apache License, Version 2.0. (n.d.). Apache. Retrieved February 21, 2021, from https://www.apache.org/licenses/LICENSE-2.0
[^libgdxfeatures]: libGDX. (n.d.) Features - libGDX. Retrieved February 22, 2021, from https://libgdx.com/features/
[^libgdxroadmap]: libGDX. (n.d.) Roadmap - libGDX. Retrieved February 21, 2021, from https://libgdx.com/roadmap/
[^libgdxstatusreports]: libGDX. (n.d.) Status Reports - libGDX. Retrieved February 22, 2021, from https://libgdx.com/news/devlog/
[^libgdxlwjgl3]: libGDX. (n.d.) Finish LWJGL 3 backend and request for testing \#3673. Retrieved February 22, 2021, from https://github.com/libgdx/libgdx/issues/3673
[^libgdxbook]: D.S. Márquez, A.C. Sánchez. (2014) Libgdx Cross-platform Game Development Cookbook
