Foreword
"Yoda's aphorism ("There is no 'try'") sounds neat, but it doesn't work for me. I have done most of my work while anxious about whether I could do the job, and ensure that it would be enough to achieve the goal if I did. But I tried anyway, because there was no one but me between the enemy and my city. Surprising myself, I have sometimes succeeded."
Richard Matthew Stallman ,
Launcher of the GNU Project and founder of the Free Software Foundation
Sometimes it seems that the world is limited to just the Microsoft Windows operating system and that the developing of complex applications is impossible without the latest version of MS Visual Studio. But there are open houses where there is no need to look at the sky through the windows. There are a lot of development environments that are different from commonly used ones, and this variety allows us to feel the world of the software in its entirety.
PCs are losing their significance increasingly and are yielding the personal computing device's role to tablet computers and smartphones. The world does not consist of only one hardware architecture nowadays. The different CPU architectures and operating systems for supporting them are available now. The ability to develop cross-platform applications is important too.
Many software development tools have been created as a part of the GNU Project since 1984 when the project started. The GNU compiler collection is a part of these software development tools.
Minimalist GNU for Windows (MinGW) is a software port of the GNU Toolchain for Microsoft Windows operating system. Its minimalism means that MinGW doesn't provide the whole POSIX compatible environment. In the meantime it doesn't yield to its ancestor for Unix-based systems but allows you to feel Unix philosophy.
MinGW allows open source software developers to port their software to the Windows operating system. MinGW software with any of the well-known cross-platform framework integration allows you to develop cross-platform applications even if you don't care about this feature. This feature provides a great competitive advantage if your customer decides to change his or her computing platform to another suddenly. You don't need a special Linux version or additional developer team in this case. Just make minor changes in your software and that's all you need.
The MinGW software allows you to use plenty of open source C and C++ libraries that integrate with MinGW well. You can develop applications with more features and reuse source code thanks to these libraries. Often open source libraries' licenses allow you to choose if your application will be a free software or a proprietary one.
The world of command-line interface, Makefiles, and build systems can be very enthralling like other new things. Compiling your program with new tools always leads to surprises. It finds faults in places with seemingly clean code. Try to calm it down.
You do not get lost. You can integrate MinGW software with an integrated development environment (IDE), such as Code::Blocks, Qt Creator, and even Eclipse if you will tolerate Eclipse's slowness.
Good luck! And don't forget to use a control version system for your source code. The frequent commits are a pledge of quick bugs searching that has been added to the developed source code with any new feature or code correction.
This book allows you to quickly start new software project development thanks to detailed explanation on how to create a necessary development environment. You will know how to download necessary tools, choose user interface library and compile applications. At first, it is important to understand where to start. I believe that this book will dispel your doubts and you will understand that these things are actually simple.
Try it!
Vitaly Lipatov
CEO, Etersoft
About the Author
Ilya Shpigor is a software developer in a flight simulator manufacturing company in Saint Petersburg, Russia. His work is in developing real-time computing systems that work under heavy computational loads. Ilya prefers to use open source software products, such as the Linux operating system and GNU toolchain, for his daily tasks.
He has participated in ALT Linux distribution and Wine open source software development before his current job.
Ilya has experience in cross-platform software development, porting applications to other computing platforms, and real-time computing systems design. He is interested in automating routine tasks and researching the capacities of different programming languages to solve specific problems.
Writing a book is the hard work of many people and not just that of the author. I would like to thank everyone who has helped me with this work.
I would like to gratefully acknowledge Navin Mehra, an Author Relationship Executive, who found me and suggested I write this book. It is difficult to overestimate the importance of this event for the book.
I would like to thank the Commissioning Editor, Maria D'souza, who corrected my drafts so many times.
I would like to thank the technical reviewer, Kyle Schwarz. His comments were very helpful to improve this book significantly.
And a special thanks to my mentor and friend, Vitaly Lipatov, who introduced me to the wonderful world of open source software.
About the Reviewer
Kyle Schwarz has been working on Linux machines for over 7 years and has a deep understanding of low-level system functions. He is a detail-oriented individual, who has experience in many aspects of computer software and hardware. He enjoys working with all technology platforms and is constantly expanding his experience in this field.
He has worked for several major companies on projects that involved FFmpeg, Windows BATCH scripting, Linux BASH scripting, web development, web design, Windows Installer scripting, and much more. He currently operates zeranoe.com and does contract work for companies and individuals.