Mono ha un posto nel mondo delle imprese?


22

Per le soluzioni enterprise basate su Windows, a volte .NET è la scelta migliore. Come viene guardato Mono dalle aziende che devono usare Linux (o piuttosto preferiscono usare Linux)? Supponendo che gli sviluppatori non siano un problema e abbiano familiarità con .NET / Mono e altri possibili concorrenti come Java.

Un'azienda di medie / grandi dimensioni eseguirà Mono sui propri server come opposto a tecnologie come Java? Conosci qualche compagnia del genere?

Risposte:


22

L'abbiamo usato nella grande società in cui lavoro. Non l'abbiamo pianificato dall'inizio del progetto, ma ha funzionato in quel modo.

Avevamo un progetto interno che abbiamo sviluppato in .NET, una volta entrato in UAT, il proprietario dell'azienda voleva aprire l'app fino ad alcuni clienti e allo staff interno. La maggior parte dei nostri server esterni (DMZ) sono basati su Linux e i server Windows che si trovano nella DMZ non erano adatti (troppo vicini alla capacità). Invece di acquistare nuovo hardware qualcuno ha suggerito di eseguire l'app su Mono. Abbiamo trascorso un paio di giorni a fare i nostri test e quindi abbiamo rilasciato l'app per il QA, quindi UAT. Non abbiamo avuto problemi.

Se all'inizio del progetto ci fosse stato dato il requisito, potremmo non aver scelto di scriverlo in .NET, ma questo è stato un bel risultato di una modifica molto, molto tardiva. Ora siamo abbastanza fiduciosi che se si ripresentasse potremmo implementare con successo su Mono (anche se penso che alla fine dovremmo modificare un po 'di codice, penso che siamo stati fortunati).


5
Bella storia di guerra.

15

Non ho usato il mono in commercio, ma lo uso in privato, perché lavoro in un'azienda Windows, ma privatamente sono un utente Linux (quindi posso riutilizzare ciò che faccio al lavoro).

Nel complesso, concordo con Miguel de Icaza che afferma:

  • Il 25% delle applicazioni .NET funziona subito con mono
  • un altro 25% può essere fatto funzionare entro un giorno o meno
  • ulteriore 25% può essere fatto funzionare entro una settimana
  • L'ultimo 25% richiede una riscrittura completa dell'applicazione (WinForms / COM)

Mono funziona abbastanza bene, ma ci sono alcuni problemi:

  • Supporto VB.NET solo per .NET <= 2.0
  • Autenticazione di Windows non implementata
  • WPF non implementato
  • Supporto WCF incompleto
  • Entity Framework non implementato e nessun piano da implementare
  • "Web part ASP.NET" non implementata
  • Nessun supporto di interoperabilità COM
  • La connessione Sybase per la versione 15.5 (più recente) non funziona
  • Bug e incompletezza nella libreria di classe C # (ad es. XML era buggy in mono <2.6)
  • Il controllo del browser Web Linux richiede GTK #

Quindi i problemi minori:

  • Windows Form funziona, ma non viene sempre visualizzato correttamente
  • MonoDevelop non è in grado di progettare moduli Windows
  • Il debug 'step through' di MonoDevelop non funziona davvero
  • Arresti anomali del servizio singolo dopo 5 ore ...

Forma quello che posso dire:

  • I servizi Web funzionano in modo eccellente
  • Se si esegue un'applicazione Web, funziona abbastanza bene (se non utilizza WebParts).
  • Se esegui WindowsForms, non sarà sempre molto bello (per non dire altro).
  • Non esiste un equivalente funzionante per Microsoft Reporting Service (FYIreporting è la cosa più vicina ad esso, ma è lenta, buggy e molto incompleta, oltre a nessuna attività da più di un anno)
  • Si verificheranno problemi se è necessario creare documenti Word o Excel.

Se vuoi sviluppare .NET su Linux

  • È possibile sviluppare ASP.NET lì (debug e passaggio funziona molto male)
  • Non puoi davvero sviluppare WinForms su Linux
  • Devi usare GTK # invece di WinForms

In altre parole:

  • Mono ha il suo posto nell'esecuzione di applicazioni Web e WebServices e MailServer.
  • Ma non è possibile eseguire applicazioni WindowsForms, è necessario scrivere applicazioni con GTK #
  • Manca una soluzione di reportistica e supporto per il formato di file MS (o quindi librerie funzionanti)



Modifica (aggiornamento 2015):
volevo aggiungere che ormai, il debug 'step through' funziona in modo eccellente e puoi usare MonoDevelop per sviluppare applicazioni web su Linux, anche con dipendenze nuGet. Anche il problema con le librerie Excel e Word è scomparso e il framework entità è ora open-source. Il resto è praticamente "così com'è" (non so se il mono-servizio è stato risolto, ma lo spero).
Ciò che è anche migliorato è che ora puoi avere i pacchetti attuali per la tua distribuzione, il che significa che non devi aspettare fino alla prossima versione di, diciamo Debian / Ubuntu, fino a ottenere l'ultima versione mono (senza doverli compilare da soli ). Questo è un grande risparmio di tempo.

Inoltre, con il rilascio di Roslyn, il supporto VB.NET dovrebbe migliorare molto nel prossimo futuro.


Non ho avuto difficoltà con il supporto di Winforms in Mono. Certo, il risultato non è esattamente un'opera d'arte, ma è perché non è in esecuzione in Windows.
Robert Harvey,

3
Nota: il framework delle entità è ora open source. il team mono ha iniziato a includerlo nell'attuale versione di sviluppo
linquize il

@Robert Harvey: Grantet, molte delle basi funzionano (es. Pulsante, treeview, file di testo, etichette, persino datagrid), ma non appena aggiungi uno splitter, è "Eccezione non implementata".
Quandary

14

La mia azienda sviluppa un'importante applicazione desktop principalmente-.NET e rilascia versioni Linux in esecuzione su Mono, quindi direi di sì, c'è sicuramente un posto per Mono nelle soluzioni basate su Windows aziendali.

Impacchettiamo Mono con l'installazione della nostra applicazione, senza richiedere agli utenti di installarla separatamente (e in questo modo controlliamo anche la versione).


Sì, devi controllare quale versione mono utilizzare. Quello con le distribuzioni di Linux è di solito piuttosto vecchio, quindi ha più bug. Lo spediamo di tanto in tanto da git mono-2-10 branch al fine di ridurre i bug e sappiamo quali possibili bug potrebbero subire il nostro programma.
Linquize

3

Penso che la principale preoccupazione che avrebbero molte aziende siano i problemi di licenza tra Mono e Microsoft. La mia comprensione è che, sebbene Microsoft abbia formalmente convenuto che Mono può utilizzare le tecnologie .NET di base, ma al di fuori di questo, incluso circa roba molto comunemente usata, è più un'area grigia legalmente con Microsoft che non afferma alcuna posizione ferma su di essa in un modo o altro.

Ciò ovviamente lascia aperta la possibilità che, in fondo, richiederanno canoni di licenza o semplicemente faranno causa per violazione di brevetto. È improbabile che uno dei due si verifichi dal modo in cui si stanno comportando in questo momento, ma alla maggior parte delle aziende non piace quel tipo di incertezza, in particolare non quando si tratta di potenziali passività e costi collegati.


3
La mia comprensione è stata che la specifica CLR / C # non è proprietaria e Mono implementa tale specifica senza fare molto (se presente) affidamento sull'origine .NET originale.
Adam Lear

5
@Anna: potrei non essere un esperto di queste cose, ma sono abbastanza sicuro che Mono sia ancora a rischio, indipendentemente dalla poca dipendenza che ha sulla fonte .NET originale. Ciò è dovuto ai brevetti di Microsoft (che possono essere applicati con o senza la copia del codice Microsoft in Mono). Penso che la FSF abbia sinteticamente sintetizzato qui il problema: fsf.org/news/2009-07-mscp-mono
Adam Paynter,

3

Non penso che ci sia molto spazio per Mono lì:

Java è già una piattaforma consolidata su Linux, con una vasta comunità e abbondanza di librerie e strumenti di qualità aziendale, sia commerciali che open source. Non vedo alcun motivo per scegliere Mono su Java quando si avvia un nuovo progetto destinato a Linux (o Mac), a meno che non ci siano circostanze specifiche (vedere la risposta di Walter).


7
Uno dei motivi sarebbe che C # è solo un linguaggio più maturo e meglio progettato di Java e più facile e senza problemi con cui lavorare. Mi sembra una ragione molto convincente.
Konrad Rudolph,

3
@Konrad: questo è vero per le recenti versioni di C # (sono iniziate più o meno allo stesso modo, ma si evolve molto più velocemente di Java). Sfortunatamente, la mia esperienza mi dice che le aziende raramente scelgono la lingua per i suoi meriti. D'altra parte, sia .NET che JVM offrono linguaggi alternativi, probabilmente meglio progettati sia in C # che in Java, quindi non mi piacerebbe davvero uno rispetto all'altro in base a quello.
Mladen Jablanović,

Se Mono fosse stato disponibile in precedenza, avremmo considerato .Net / Mono per il nostro ambiente. Tuttavia, non lo era, quindi ora siamo sul sentiero Java. Possiamo fare un po 'di lavoro in .Net / Mono, ma l'ambiente primario è Java e si prevede che rimarrà tale per un bel po' di tempo. Essendo qualcuno che funziona in entrambi, non ottengo il bashing Java dai C # ers. Sono MOLTO simili. Il linguaggio C # è leggermente migliore, ma le librerie Java e i linguaggi JVM extra sono migliori. Come piattaforme nel complesso, sono quasi uguali. Le cose della biblioteca sono più importanti per me, quindi potrei anche dare un cenno a Java.
Brian Knoblauch,

1
Mono consente di utilizzare C # in Linux. C # ha così tanti zuccheri sintattici per facilitare lo sviluppo.
Linquize,

2015: Java è un cittadino di seconda classe su OS X (Mac). Mono funziona magnificamente su OS X (sebbene WinForms sia ancora lento e brutto). E con OmniSharp, puoi ottenere tutti i tipi di strumenti di editing di qualità IDE in editor non IDE (Sublime, Atom, Vim, Emacs).
Kent A.

1

Prima di usare mono, dobbiamo assicurarci che nel programma non sia presente alcun codice hardcoded '\' per la stringa di percorso (usa il prefisso Path.Combine ()) o "COM" (accetta semplicemente la stringa anziché l'intero) per la porta seriale.

Cosa funziona bene:

  • App console
  • App Web

Problemi riscontrati:

  • WinForms non stabile: crash casuale.
  • Supporto linguistico: la comunità potrebbe non conoscere bene tutte le lingue, in particolare i dialetti di alcuni paesi / città. Locales / collation corrispondenti potrebbero essere persi.
  • I metodi usati raramente possono avere un comportamento incompatibile con .NET.
  • xsp supporta solo HTTP 1.0. Attualmente manca il supporto HTTP 1.1.
  • Il controllo del browser non funziona bene.

È meglio usare il mono internamente (come il sistema ERP) come ambiente controllato.


0

Mono è un'ottima alternativa se si dispone già di un codice .NET che deve essere eseguito su un ambiente multipiattaforma. Mono è ampiamente utilizzato nel mondo degli affari proprio per risolvere questo problema.

Discuterei contro l'uso dell'esistenza di Mono come scusa per l'avvio di un progetto con .NET che sapete dovrà essere multipiattaforma. La ragione di ciò è il ritardo tra lo stato dell'arte con .NET e la velocità di sviluppo di Mono.

D'altra parte, se non intende utilizzare Mono in un progetto futuro, vorrei si cautela di indirizzare il quadro Mono ed eseguito su .NET come alternativa secondaria poiché Mono è in gran parte un sottoinsieme della piena funzionalità .NET.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.