FreeRDP
  • Home
  • API
  • GitHub
  • Wiki
  • Remmina
  • Mailing List
  • Twitter

FreeRDP: A Remote Desktop Protocol Implementation

FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. Enjoy the freedom of using your software wherever you want, the way you want it, in a world where interoperability can finally liberate your computing experience.

IRC: #freerdp @ irc.freenode.net

Download Now!Download Now!

Screenshots

Previous
Next

Recent Blog Posts

Thinstuff Android and iOS Ports Available on Google Play and the App Store

Posted by Marc-André Moreau on March 28, 2013 in Uncategorized

As of today, the Thinstuff Android and iOS ports of FreeRDP are available on Google Play and the App Store. Both can be found by searching “freerdp” and looking for the FreeRDP blue rabbit logo. The apps are completely free, which is a good deal when you think that popular mobile RDP clients easily cost between $15 and $20. We intend to keep improving iFreeRDP and aFreeRDP, so if you find glitches, please report them. This is only the beginning :)

 

iOS (iFreeRDP)

 

https://itunes.apple.com/us/app/ifreerdp/id604813768

 

Android (aFreeRDP)


Android app on Google Play

https://play.google.com/store/apps/details?id=com.freerdp.afreerdp

Read More
No Comments

Thinstuff iOS Client Released

Posted by Marc-André Moreau on February 15, 2013 in Uncategorized

FreeRDP community,

Following the Android client release, I am pleased to announce the release of the iOS client! An announcement has been made by Thinstuff on the mailing list:

Hi all,

Thinstuff is proud to announce that iFreeRDP, the FreeRDP iOS client, is now available on git master.

As with the Android port we are sorry that it took so long for the iOS port to be released. However, we think iFreeRDP turned out just as awesome as aFreeRDP and it was definitely worth the wait.

Like its Android counterpart, iFreeRDP is quite mature and comes with a lot of hot features:
* A touch pointer for easier user input within a session
* Gestures for common input tasks like scrolling, zooming, etc.
* Custom keyboard views for advanced user input (i.e. common shortcuts like Win+E)
* A flexible connection management UI allowing to quickly connect to a host as well as handling a large list with multiple predefined connections
* Built-in help for touch pointer and gestures

iFreeRDP integrates seamlessly into FreeRDP’s build system. For detailed build instructions refer to docs/README.ios. You will need the regular iOS development environment: Mac OS X, Xcode and the iOS SDK. As you probably know, compiling and deploying to a real iOS device requires a developer account.

Thinstuff will be publishing and supporting iFreeRDP on the App Store, making it convenient for users to get started. The application has not yet been submitted for approval, we intend to do it soon. The initial approval process can be lengthy, so please be patient. Another announcement will be made when iFreeRDP becomes available on the App Store.

Thinstuff strongly believes in FreeRDP and we think that iFreeRDP is a perfect addition to the project, completing the current support for mobile clients. We hope you will like it just as much as we do!

Best regards,

Your Thinstuff Team

The sources of the iOS port are available as of now on git master. A prebuilt development snapshot (unsigned) is available here if you have a jailbreaked device: iFreeRDP.ipa.

Read More
No Comments

Thinstuff Android Client Released

Posted by Marc-André Moreau on January 29, 2013 in Blog, Uncategorized

FreeRDP community,

Here is the moment you have all been waiting for: the Thinstuff Android client has finally been released! An announcement has been made by Thinstuff on the mailing list:

Hi all,

Thinstuff is proud to announce that aFreeRDP, the FreeRDP Android
client, is now available in git master.

The initial announcement was made too early, and we have run behind
schedule. We apologize for the inconvenience and for the lack of status
update on our side. However, we believe that this release was well worth
the wait, and that you will be impressed with it.

aFreeRDP is already quite mature and comes with a lot of nice features:
- Built-in help for touch pointer and gestures
- A touch pointer for easier user input within a session
- Gestures for common input tasks like scrolling, zooming, etc.
- Custom keyboard views for advanced user input (i.e. common shortcuts
like Win+E)
- A flexible connection management UI allowing to quickly connect to a
host as well as handling a large list with multiple predefined
connections

The build integrates seamlessly into FreeRDPs build system – you just
have to install the Android NDK/SDK and ant. For detailed instructions
on how to build aFreeRDP refer to docs/README.android.

Thinstuff strongly believes in FreeRDP and we think that aFreeRDP is a
perfect addition to the available clients. We hope you like it :) .

Best regards,

your Thinstuff Team

The Android client sources have been merged into git master, ready to be improved on :) Releasing the iOS client is next on the list.

A development snaphost is available here if you want to try it on your Android device now.

UPDATE: aFreeRDP is now available on Google Play.

Read More
No Comments

WinPR: Windows Portable Runtime

Posted by Marc-André Moreau on May 24, 2012 in Blog

WinPR is a spin-off project of FreeRDP which aims at providing a portable implementation of important portions of the Windows API. Just like FreeRDP, WinPR is released under the Apache license. Unlike Wine, WinPR does not provide binary compatibility, and does not require applications to be built for Windows. Instead, WinPR provides API compatibility for applications targeting non-Windows environments. When on Windows, the original native API is being used instead of the equivalent WinPR implementation, without having to modify the code using it.

WinPR is the result of long and thoughtful process that came up after years of FreeRDP development. RDP, as you know, is a protocol designed by Microsoft and is primarily “Windows to Windows”. In many instances, protocol messages rely heavily on Windows-specific APIs which have no direct equivalent on other operating systems. For instance, core graphical messages are based on GDI, network level authentication makes use of the Microsoft SSPI authentication modules (CredSSP, NTLM), and terminal server gateway makes use of both SSPI and MSRPC. That’s not even mentioning all the effort that went into mapping keyboard systems and time zones. Developing FreeRDP is in many ways all about implementing Windows APIs outside of Windows.

Immense efforts have gone into the implementation of such features, to the point where they begin having value outside of FreeRDP itself. At this point, one of the most valuable part of WinPR is the set of SSPI modules. Various NTLM implementations exist, all with different interfaces, but the WinPR implementation is a direct replacement of the original. This is an advantage because the API is already well documented, with expected inputs and outputs. FreeRDP can also optionally build against the native SSPI modules when on Windows. Making this code easily reusable to any one means that application developers now have an easy way of porting their applications to make use of the Windows authentication architecture.

WinPR is also a response to a recurrent problem in FreeRDP development: the proliferation of custom helpers and utility functions. While those are useful, they often need to be modified and updated to meet new requirements, causing frequent API changes. Breaking the API regularly obviously makes a lot of developers unhappy. By choosing to implement an existing and mature API, we can effectively get rid of the core of the problem. If a certain API has been used for years and it fits the needs of most people, you are less likely to need to break it yourself.

Besides the argument of API stability, there is another huge advantage in using the Windows API over custom utility functions: the ability to easily share code with other projects that aim at implementing the same API. For instance, the SSPI modules currently developed in WinPR are of high interest to the ReactOS project. If the code was filled with custom utility functions, it would be much harder to use outside of FreeRDP, hindering such collaboration opportunities. For instance, instead of wrapping calls to MultiByteToWideChar() in a custom unicode conversion utility, we can use MultiByteToWideChar() as the utility function and provide an implementation on non-Windows systems.

As a general rule in WinPR, if a utility function can be replaced by a part of the Windows API, then the Windows API will have precedence. Otherwise, a utility method can be used, keeping in mind the downsides of it.

WinPR is also designed to be as modular as possible, using the MinWin architecture as a reference. MinWin is a refactoring effort of the Windows API which is more cleaner and comprehensive than the original. The API has been separated into logical sets, each with a DLL. Not a lot of documentation is available online about MinWin, but one can find its structure in the MSDN article “Windows API Sets”: http://msdn.microsoft.com/en-us/library/hh802935/

Just like MinWin, WinPR aims at being minimalistic and modular, such that one can have fine grained control over what is to be used. For projects making use of only a small amounts of WinPR, it should be possible to depend only on the minimum required.

At last, why not simply use Wine or code from other projects like ReactOS or Samba? In all of these cases, there are both licensing and architectural problems which make it fairly hard for us to use in FreeRDP. For instance, Wine provides binary compatibility, and it’s not easy for a native Linux application to make use of parts of it without being built for Windows. Samba has an interesting MSRPC implementation, but it’s a fairly big dependency, without counting the fact that we can forget about portability on mobile platforms like Android and iOS. Unfortunately, none of these provide a highly portable implementation of the Windows API in the way we would like and under a license which is suitable to us, justifying the existence of WinPR.

Through WinPR, investment done in FreeRDP development will take a new life and become even more valuable. We will open new doors to even higher levels of interoperability. We will foster collaboration with other projects following similar goals and reach new heights at an increasingly faster pace. Stay tuned, you will be amazed!

Read More
No Comments

Thinstuff Android and iOS Ports Announcement

Posted by Marc-André Moreau on March 21, 2012 in Blog

FreeRDP community,

I have an exciting announcement to make, and I’m sure you’ll be excited by it as well. For quite some time already I have been working with Thinstuff on the development of FreeRDP ports to Android and iOS. I have been working and coordinating with Thinstuff employees for both ports, with me in charge of software architecture. This is one of the reasons why I developed libfreerdp-gdi, a highly-portable GDI library which we’re using for the mobile ports, among other things. If you were to start a new port from scratch today you’d notice that the code is already portable, since I’ve been keeping mobile devices in mind all that long.

Thinstuff has a precedent in open source mobile application development: iRdesktop, an iOS port of rdesktop (http://www.irdesktop.com/). When Thinstuff originally found out about FreeRDP, they contacted me to see if we could collaborate on mobile ports. We agreed that the code would eventually be open sourced, but we did not have a precise idea at that time of a possible timeline and licensing. Since I owned an Android phone and had some basic Android development experience, I got started on the Android port, which would be followed by the iOS port. There is almost two years of work that went into those ports, with both me and Thinstuff employees actively working on it. If there’s something I learned from this experience is that mobile application development is really hard to get right and it is also very time consuming. The environment is highly restrictive, and making a usable application is nowhere near trivial. These ports are not simple applications which display a windows desktop, they are full-blown applications that have the potential to compete with current commercial alternatives. If many companies would be tempted to keep those ports proprietary, I am really proud to say that Thinstuff strongly believes in open source and is willing to stick to their principles. I take my hat off to Michael Gibson and Norbert Federa from Thinstuff for their sustained support of FreeRDP.

That being said, the licensing question wasn’t an easy one to figure out, and Thinstuff’s experience with iRdesktop lead to some interesting reflections. The world of application stores is completely different from other environments: users basically browse through a catalog of apps which they barely know and can buy any of them very easily. The problem is that many try to profit from this distribution model by ripping off existing open source software and rebranding it to make it look like a completely different app which is supposedly worth buying, while claiming that the code was all theirs. There is nothing wrong with companies developing commercial derivatives from FreeRDP, especially since we’re using licensing which is friendly to such use, but there is definitely something wrong when people try claiming an application was all written by them and refuse to credit the original authors. This is real, and it unfortunately happened on multiple occasions with iRdesktop.

For many reasons, I have advised Thinstuff to license the ports under the Mozilla Public License (MPL) 2.0. The 2.0 version of the MPL is fairly recent, and addresses many issues which were found in the more commonly known MPL 1.1. It is compatible with most popular licenses like Apache and GPL, yet it is still very commercial-friendly. The MPL is a weak copyleft license, meaning it requires the redistribution of MPL sources, but does not require the distribution of other sources. The conditions which describe which sources should fall under the terms of the MPL are weak: if you modify a file under MPL, it remains MPL. If you use an MPL code snippet within a new file, then that file is also covered under the terms of the license. This also means that you can easily add your own source files under a completely different license if they do not contain MPL code, making commercial derivatives trivial even though it’s copyleft. You can find more information about the Mozilla Public License 2.0 here: http://www.mozilla.org/MPL/

The MPL 2.0 license was chosen for its high compatibility with application stores and existing licenses. The goal is to have legal ground to ask that apps using the MPL code be required to redistribute it, making it much easier for us to get application developers to credit the original authors properly. If the mobile ports were under the Apache license like the rest of FreeRDP, we could not ask that application developers redistribute the sources, making that task harder. Cheap rip-offs are simply impossible to prevent, but we can at least attempt to get the work credited. This is the trade-off that was made in order to reduce the risks associated with distribution in application stores. Please note that the MPL only covers the port-specific code, and that the rest of FreeRDP remains Apache.

As for a timeline, there is still some preparation work to be done. We wish to release initial betas of the ports at about the same time as we open source them. From there, we invite all community members to collaborate on improving the ports. Trust me, you will definitely like what you will see :) We believe we will be able to release the sources no later than the end of April, so be patient, we’re almost there!

Read More
No Comments