Temat: Visual Studio czy Monodevelop
Tak. Niestety, musisz wtedy zrezygnować z DllImport, COM, Rejestru i innych technologii/komponentów właściwych dla Windows, np. kontrolka przeglądarki internetowej (w Windows jest to silnik Trident, a więc IE, w Linuksach inne, np. WebKit czy Gecko). A także pamiętać, by wraz z aplikacją dystrybuować biblioteki GUI (np. GTK#). Jeśli zamierzasz komunikować się z jakimś konkretnym softem, który wystawia interfejs przez COM, to wtedy z tego nie skorzystasz. A przynajmniej nie bez "obejść".
Co do tego "pod jaką platformę opłaca się programować" - to zależy co i dla kogo.
"Od zawsze" zajmuję się systemami medycznymi i OSy inne niż Windows mnie nie interesowały. A to ze względu na fakt, że klienci używali wyłącznie systemu z Redmond. Mój znajomy nadal programuje pod Windows Mobile, chociaż na rynku od kilku lat króluje Android i OS - i jeszcze ma kilka lat ma zajęcie. Z drugiej strony, gdy zacząłem ostatnimi laty zajmować się tworzeniem systemów do statystycznej analizy danych, przenośność GNU R, MONO, Oracle'a, SQLite czy Postgresa bardzo mi pomogła, ponieważ klienci mogli wykorzystać istniejącą infrastrukturę serwerową, nie musieli kupować Windows Server albo mogli wykorzystać słabsze maszyny z np. Debianem. Możesz także pisać komercyjnie (czyli za $) pod Windows, a w ramach "promocji marki" - wersję Linuksową wydawać za free.
Jeśli zamierzasz skupić się na algorytmice (kodeki, kompresory, audio-video), to oczywiście przenośność jest priorytetem. Jeśli na bogatych interfejsach graficznych, to zapewne nie raz skorzystasz z PInvoke (czyli funkcji zależnych od systemu).
Możesz oddzielić warstwy softu i logikę pisać przenośnie, warstwę dostępu do danych - na tyle przenośnie, na ile się da (pomoże Ci tu jakiś ORM). Obie warstwy zamkniesz w serwisie (czy to WebSerwice, czy to gniazda TCP/IP, czy to potoki, czy coś jeszcze innego), zaś warstwa graficzna będzie "konsumować" ów serwis. I napisana może być w czymkolwiek. Wtedy soft pod Windows może być pisany w WPFie ze wszystkimi bajerami, soft pod Linuksa - w języku jakim zechcesz ( C++/Javie/.NET/Mono) i z użyciem dowolnych bibliotek GUI: GTK, QT, Swing, TclTk, WxForms, albo po prostu będzie to "thin client" w ASP.NET czy PHP.
Dodatkowo powyższą separację warstw możesz powiązać z mechanizmem "pluginów", gdzie podstawowa część będzie niezależna od platformy i pisana np. w Mono, zaś do obsługi bardziej złożonych i zależnych od OS zadań pisane będą dedykowane pluginy - i te mogą być już zależne od OSa. Przykład: odtwarzanie treści multimedialnych możesz wydelegować do pluginów, gdzie windowsowy wykorzysta MCI albo WMPlayer (bo to jest praktycznie w każdym systeime), zaś linuksowy - właściwe mu narzędzia (i tu już - zależnie od dystrybucji).
---
Co do baz danych - większość baz ma swoje providery, w tym PostgreSQL, MySql, Firebird, Oracle, SQLite i kilka innych.
Warto także pamiętać, że do komercyjnych celów za darmo możesz wykorzystać Oracle XE (podobnie, jak pod Windows - MS SQL Express).
---
Tomek ma rację co do Androida, ale pamiętajmy także o Win Phone ;)
Adrian Olszewski edytował(a) ten post dnia 16.06.12 o godzinie 15:20