How do I port software that I have written for Windows to Ubuntu?
I have written software packages for the Windows platform. I want to change to Ubuntu. At the moment I use Visual Basic and Access Databases. Can anyone suggest What I should use to rewrite my software for the Linux platform? It must be known that I am a complete novice to Linux. Any assistance will be MUCH appreciated.
You should ask this on a coding forum ie. stackoverflow.com (someone will probably move your question there 😉 ) But in short: languages perl/python and MySQL of SQLite as database. Oh and if you do it with those you can also make it useable on both platforms 😉
Programming for Ubuntu has been one of the topics of this site since always. We even have a tag for it. It’s even on the FAQ, point 3. This question can be too open, but it’s not off-topic.
7 Answers 7
As @Rinzwind has said you will find more accurate responses in stackoverflow but for a beginning .
I would recommend you to try to port to linux your programming knowledge instead of your code, and give python a try. It is a simple even powerful language totally multiplatform and with very nice learning curve. For database access there are a lot of frameworks and libraries ( SQLAlquemy for example ) and for the GUI you can try wxPython, QtPython, . for example. If you want to develop database applications you should give dabo a try
But, if you still want to try to port your VBase code you can try with:
- Gambas Which is a development environment based on a Basic interpreter
- Mono Which is a .NET-like framework for linux. ( see mono-develop ide also )
And for the database access . sorry but i think i can not help you with that may be these frameworks have some database support
I would say for someone coming from VB, Gambas might be a real good fit. That said , python is the lingua fraca of Linux. You will find python in almost every linux distribution. Developing python based application makes it easy to deploy with setuptools.
As somebody who used to use a lot of access and VBScript, I can say the transition isn’t super-easy but it is possible and if you pick the right technology, even desirable. I’m writing much better software these days than I ever did over ODBC and Access.
There are a few options but your mileage will vary based on what you’re doing and past experience.
- Python + Django My first suggestion is a web development one. I’m a web developer more than anything else so I would suggest this. Django makes managing your database schema stupidly simple. You create a Python class for each table, run a command and it establishes a fully relational database. Then you can query based on those classes (known as Models). All this without writing a single line of SQL. It also comes with a very sexy admin interface which requires just a few lines of code to activate for your models. It handles validation, searching, filtering, ordering, input, some output/reporting and you can add on anything that isn’t already there. And because it’s a web interface, it’s a lot easier to share with colleagues than by tossing an Access file around. And Python is a beautiful language. Simple elegance. You’ll see that based on how many other people suggest it 🙂
- LibreOffice Base If you want to stick with simple databases, LibreOffice (or OpenOffice) Base is probably the most Access-like thing at your fingertips. It’s not Access and it’s quite simple and limited in respect to what Access can do (if you know what you’re doing) but it’s only supposed to be a simple desktop database.
- Kexi Another take on the Access-style database. It looks more flexible than Base but I’ve never used it so can’t really say how good it is.
The last two are models you’re probably more comfortable with but honestly, neither is great and that’s because Access isn’t a good model for database development when there are so many better frameworks.
You want to address the future of your development before you migrate to Ubuntu. If you just boot to Ubuntu now, you’ll get very frustrated if you can’t start working immediately. All three solutions above can run on Windows so get stuck in now.
The two applications can be downloaded and installed and Django takes a little more effort to get going. Start with this to install it (follow their advice about Python 2.7) and then move onto the official tutorial to start programming.
A great way to get started developing for Ubuntu is by going to the developer site at developer.ubuntu.com. There you’ll find tutorials and information on the different options you have. Once your’e done developing, submit your app there to get it into the software center.
I would absolutely recommend that you use Python as a programming language and GTK and Glade to design your GUI interfaces. Python supports all kinds of databases, so that’s up to you. MySQL is popular. So is PostgreSQL. There are many others to choose from, depending on what kind of data you want to store. But you should probably choose a cross platform one.
Both Python and GTK can be used on Windows and OS X as well as Ubuntu and others. The same is true for the databases. Ubuntu is a really comfortable development environment with all the tools you need at your fingertips. You should also have a look at the Quickly project. This is a way to jumpstart development projects, make packaging easy, etc.
Porting your application to Ubuntu, also means you’ll have the ability to reach a bigger audience with less difficulty later, since all the tools are cross platform. As a Visual Basic programmer, I think you’ll really love Python.
If you do not use too much windows specific library in development, you can use mono to run apps in both Linux based systems and Mac. But I’d rather prefer Qt for cross platform developing. It will also help to port your app in mobile devices.
To be fair, Qt only supports MeeGo, Symbian, and Windows Phone where as .Net\C#\mono supports Android, iOS, Windows Phone 7 and I believe MeeGo and Symbian as well. (With respect to mobile platforms)
Qt as SDK and QtCreator as IDE is what you want. It makes great GUI Applications look nice on nearly every OS there is, including those 3 (Windows, Linux, OS X). It’s easy to learn, inutitive and performant. Try it, you won’t regret it!
I don’t know much about VisualBasic, and I don’t know of an equivalent in the Linux world.
For Pascal, there is the gpc (GNU Pascal Compiler). Haven’t used it, but I’m sure it’s fairly easy for a Pascal programmer to transition. Similar cases for many other programming languages like C, C++, FORTRAN, etc. Although, I wouldn’t suggest any of those to a VisualBasic programmer, there are several options for languages that reside on several platforms. I guess your choice of language may depend a bit on your company policy etc.
Python would be my top recommendation. It’s easy to learn, it forces you to write code that is easy to read, and it is multi-platform by default. If you want to deliver closed-source applications you will see that there are a few noticeable differences between platforms. But in general most code that you write will compile on any system. The tricky part is keeping with the folder structure (i.e. C:/Program Files/ vs /usr/share/). But there are os environmental parameters that you can use to avoid hard coding platform specific options. Down side is you have to learn a new language. Up side is you can use the same code in Windows and Linux and MacOSX, etc.
To keep up a GUI for your applications, there are several options in Python. Many Ubuntu developers seem to go for GTK3, which is also available for Windows. Personally, I much prefer Qt4 (you can use Qt4 for C/C++ as well, the Python package is called PyQt4 for the official one and PySide for a community project). You won’t have an IDE the same way you do in VisualBasic, but using Qt Designer to create the GUI look makes it easy to then implement it in a code-only IDE (e.g. Wingware IDE, Eclipse, IPython. ). So you will have to switch between the GUI-designer app and the coding IDE app. The same is true for GTK3, where you would use Glade to create a GUI.
Python has a default database package implementing SQLite3. That database is rather capable, but there is no GUI to build it as with Access. There are however packages to access most types of databases. Personally, I prefer to stick with PostgreSQL for all my stuff since it is so scalable. PyQT4 has classes for all the major databases in the QtSql module, but there are many other options. You could of course also set up your old Access databases on a Windows machine with ODBC and then you could call them without switching database software.
Porting source to linux
Tagged as
Stats
Comments and Discussions
I was amazed at the similarity in functionality (gethostname). Loved the strikethrough (not thread safe).
I would APPRECIATE a graphic/tree view of the msproject vs. the CMAKE (my ignorance here), but a tree/dependency view of a project speaks volumes to me. The first hurdle to any «make» is getting the dependencies, switches and configurations correct. And some of those things SHIFT (we’ve inherited projects where one had to DEFINE a variable and another module had to have it UNDEFINED) [Don’t get me started on one project that required Python 2.x and 3 other parts that required 3.x]
Thanks for commenting. The dependencies are the same whether built in VS2022 or CMake. I don’t have a tree that shows them, but all the information needed to sketch one can be found in the table that precedes main.cpp [^].
If I inherited a project with an #undef , it would soon get cleaned up. Shameless hacking.
If you browse the repository, there’s a lot of documentation. No «demo» as such, and I don’t even know what a demo would do to demonstrate what’s in the article. But you can boot it up and start to play around with it. If you’re interested in the platform-specific code, you could run it under Windows, then Linux, setting breakpoints in the targeted code.
Some people are probably interested, so the section on how the static analysis tool was evolved has been expanded. Thanks for prodding me.
General News Suggestion Question Bug Answer Joke Praise Rant Admin
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.