Apresentação completa do Projeto Mono:
Histórico, Motivações, Rodmap, Features, Compatibilidade, Estrutura, Ferramentas,
Interoperabilidade de Aplicativos .Net
Orientações para porte de aplicativos: Linux, Mac, Iphone, Android, Cases de Sucesso.
Demonstração e Cases
WindowsForms, GtkSharp, C# Shell, Empresas usuárias, Etc…
2. CÓDIGO DA SESSÃO: #####
O Projeto Mono: Aplicações
.NET para sistemas não
Windows
Alessandro de Oliveira Binhara
Projeto MONO BRASIL
binhara@monobrasil.org
3. Agenda
O Projeto Mono
Histórico, Motivações, Rodmap, Features,
Compatibilidade, Estrutura, Ferramentas,
Interoperabilidade de Aplicativos .Net
Orientações para porte de aplicativos: Linux, Mac,
Iphone, Android , Cases de Sucesso.
Demonstração e Cases
WindowsForms, GtkSharp, C# Shell, Empresas
usuárias, Etc…
4
5. Microsoft lança o .NET
Projeto MONO
Miguel busca uma nova plataforma
para melhorar seus projetos.
Microsoft Lança a plataforma .Net
Coloca o C# como um padrão
O Core do .Net é colocado como padrão
Padrões ECMA 334 , ECMA 335
Plataforma Microsoft .Net
Multi-linguagem
Coletor de Lixo
6
7. O que é ?
Projeto MONO
Mono é uma implementação OpenSource do
.NET Permite a execução e desenvolvimento de
software .Net em ambiente Não Windows.
Mono 2.6 (atual)
WCF client e servidor,
LLVM support, LINQ para SQL usando o DbLinq.
Novo debuger.
CSharp shell agora suporta auto-completion
3.5 API agora está mais completa
ASP.NET MVC 1 e 2
xbuild agora realiza o build de projetos msbuild
Mono Compiler : C# 3.0
8
8. Mono 2.8
Is coming!!!
Suporte a C# 4.0 como padrão
Parallel Framework
Performance
Large performance improvements
LLVM support has graduated to stable
Preview of the Generational Garbage Collector
Version 2.0 of the embedding API
WCF Routing
OpenBSD support integrated
http://mono-project.com/Roadmap
9
10. Contribuições Microsoft
MS-PL or Apache Licensed Libraries
Ajax.NET, ASP.NET MVC1, MVC2,
Silverligth ToolKit, Silverligth Tests
Managed Extensibility Framework (MEF)
System.Data.Services.Client (OData)
Dynamic Language Runtime
11
11. Suporte C# 3.0 e 4.0
mcs: compilador para rutime 1.1.
gmcs: compilador para runtime the 2.0 runtime.
smcs: compiledor para rutime 2.1para compilar
aplicações Moonlight.
dmcs: iniciado com Mono 2.6 para C# 4.0
Características já suportadas:
anonymous methods , iterators,partial classes , Generics , Nullable Types,
friend assemblies , static classes, property accessor accessibility, fixed
buffers, external assembly alias, namespace alias qualifier , inline warning
control , Extension Methods, LINQ syntax, Expression trees, Automatic
properties, Lambda expressions, Anonymous types.
12
12. Suporte JAVA
Interoperabilidade
O IKVM é uma VM JAVA escrita em C# que
possibilita executar byte code Java no Mono
além de um conjunto de ferramentas para:
conversão bytecode (java) -> IL (mono)
e IL (mono)-> bytecode (java)
http://www.ikvm.net
13
13. Suporte Python e Ruby
Interoperabilidade
Atualmente o IronPython e IronRuby são
financiado pela Microsoft e licenciados sob
Licença Apache 2.0
14
14. Runtime Mono
Máquina Virtual
É a máquina virtual do Mono
O runtime do Mono está pronto
e tem possibilidade de executar
programas .NET formato
Binário.
Compilador JIT (mono), com e
sem otimizações.
Novo GC já disponível, melhorando a performance e
reduzindo o uso de memória em cerca de 50%.
15
15. Plataformas Suportadas
Supported Architectures
s390, s390x (32 and 64
bits)
SPARC (32)
Runtime
Operating system
JIT
Linux
JIT
Solaris, Linux
PowerPC
JIT
Linux, Mac OSX, Wii, PlayStation 3
x86
JIT
Linux, FreeBSD, OpenBSD, NetBSD,
Microsoft Windows, Solaris, OS X
JIT
Linux, Solaris
JIT
x86-64: AMD64 and EM64T
(64 bit)
IA64 Itanium2 (64 bit)
ARM: little and big endian
Alpha
MIPS
HPPA
16
JIT
JIT
Linux
Linux (both old and new ABI),
iPhone
Linux
JIT
Linux
JIT
Linux
16. Início do Mono
Interoperabilidade
Uso das ferramentas da microsoft
Como criar um compilador Csharp sem um
compilador.
Primeira versão do mcs foi escrita no Visual
Studio.
Inicialmente
5 engenheiros, Foco em aplicações desktop
Toda a infra-estrutura do mono é escrita em C#
17
23. Crie no VS e rode no Linux
Portando aplicativos
Compatibilidade Binária
Monte o disco do linux e copie seus binários no
linux
Compartilhe no windows e acesso no linux
Testando
Uso de máquinas virtuas: Ex: Virtual PC
Donwload das VM e LiveCD no site do mono
24
24. Sistema de Arquivos
Portando aplicativos
Cuidado com os caminhos
Cuidado com letras Maiúsculas e minúsculas
Não use caminhos absolutos, eles não vão funcionar em outros sistemas.
Use algum mecanismo como um arquivo de configuração para localizar seus
arquivos e caminhos
Busca manual de Separadores
int index = exePath.LastIndexOf("");
exeDir = exePath.Substring(0, index);
exeFile = exePath.Substring(index+1);
Código mais portável
exeDir = Path.GetDirectoryName (exePath);
exeFile = Path.GetFileName (exePath);
25
25. Variáveis de Ambiente
Portando aplicativos
Variáveis de ambiente o o PATH no Windows
usa “;” o linux e outros sistemas unix usam “:”
Você pode usar System.IO.Path.PathSeparator
para separa o path nas variáveis de ambiente
Console.WriteLine ( "Subdiretorios encontrados no PATH :“ );
string path_env = Environment.GetEnvironmentVariable ( "PATH“ );
string[] path_dirs = path_env.Split (Path.PathSeparator);
foreach (string pathdir in path_dirs)
Console.WriteLine(pathdir);
26
26. P/Invoke
Portando aplicativos
Chamadas a DLLs nativas a API Windows não
irão funcionar em outros sistemas, pois a API
não está la.
Caso você dependa de bibliotecas em C, você
deverá substituir por equivalentes no ambiente
Linux.
Sua aplicação deverá identificar o sistema que
está rodando e chavear entre as bibliotecas.
27
28. Banco de Dados
Portando aplicativos
Mono faz acesso ao SQLServer , não existe
necessidade de mudar de banco para rodar sua
aplicação no linux.
Mono Disponibiliza os dataproviders para os
bancos : MySQL, Postgresql, Oracle, DB2, SyBase
É possivel usar os dataproviders do mono no
.NET com VS para acessar os bancos livres.
29
29. Interface Gráfica
Portando aplicativos
Windows.Forms
Atualmente o Mono esta suportando windows.Forms 1 e 2
http://www.mono-project.com/WinForms
Status do Windows.Forms:
Sem suporte a windows.forms rodando em múltiplos threads. Todos os
formulários devem ser criados no mesmo thread.
Temas windows suportados a partir do mono 2.2
Suporte de transparência no linux através do composite
Todo código Windows.Forms é em C# gerenciado
Windows.Forms é suportado no Mac a partir da versão 1.9
30
30. Interface Gráfica
Portando aplicativos
Pode ser usados outros tool kits gráficos para outras plataformas
http://www.mono-project.com/Gui_Toolkits
GTK# -> Ambientes Linux , BSD e Windows
COCA# -> MacOSX
QT# -> Linux
Qyoto
wxNet
http://techbase.kde.org/Development/Languages/Qyoto
http://wxnet.sourceforge.net/
31
31. Ferramentas
Portando aplicativos
Mono Develop
Importa soluções do Visual Studio
Versões Windows, Linux e MAC
Suporte para GTK# , Iphone, MacOX
Debug integrado, controle de versão
Bando de Dados, Sistema de Testes,
www.monodevelop.com
Prj2make
Converte uma solução do Visual Studio em script para o make, gerando os
make files.
32
32. Mono Plug IN
Portando aplicativos
Verifique a compatibilidade do seu
aplicativo com usando o MOMA
diretamente do Visual Studio
Teste no Windows, Teste no Linux
Debug remoto no Linux
Empacote para linux
Crie uma Distribuição linux
customizada para seu aplicativo
com o Suse Studio
33
33. ASP.NET
Portando aplicativos
Mono Suporte Asp.NET 1 e 2
Suporta Asp.NET MVC 1 e 2
Rodando no Apache, Ngnix:
XSP, Mod_Mod , FastCGI
Suporta WebServices
Suporta Ajax.NET (Microsoft)
Exemplo
www.monobrasil.org
34
34. Moonlight
Portando aplicativos
Implementação do open source do
SilverLight da Microsoft
Baseado em XAML
Em setembro de 2007 , a Microsoft e a
Novel anunciaram a colaboração técnica isso
inclui o acesso aos sistemas de teste do
Silverligth e a distribuição do pacote de
media para usuários Linux contendo as
licenças de codec para áudio e vídeo.
Recentemente a Microsoft disponibilizou
também o Silverligth Tool Kit e este foi
integrado ao Moonlight
35
35. Moonligth
Portando aplicativos
Moonlight 3
Mooonlight 3 Pre-Alpha compatível com Silverlight 3
3D graphics
Pixel shaders
Application library caching
Out-of-browser capabilities and offline support
Pluggable media pipeline to support 3rd party codecs
HD Smooth Streaming
Native support for MPEG-4-based H.264/AAC Audio
Release Date Alpha Q1 2010 Beta Q2 2010 Final Q3 2010
36
36. C# no IPHONE
Portando aplicativos
Versão comercial do mono para IPHONE
C# and .NET on the iPhone
.NET Bindings to Native APIs
Distribute on the Apple App Store
Enterprise deployable
MonoDevelop Integration
XCode Integration
http://monotouch.net/
http://monotouch.net/Tutorials
37
37. C# no Android
Portando aplicativos
Versão comercial do mono para Android
Pluing para Visual Studio
Usa o mesmo profile do MonoTouch
Suporte OpenGL , GC, Multi-threading, .NET 3.5,
C# 3.0 e LINQ
.NET Bindings to Native APIs
http://monodroid.net/
http://monodroid.net/Tutorials
38
39. HELLO WORLD!!!
$ cat alomundo-cs.cs alomundo-vb.vb alomundo-boo.boo
class AloMundo {
public static void Main(string[] args){
System.Console.WriteLine("Alô mundo!!! em C#");
}
}
Module AloMundo
Public Sub Main(args as string())
System.Console.WriteLine("Alô mundo!!! em MonoBASIC")
End Sub
End Module
print "Alô mundo!!! em Boo"
$ mcs /codepage:utf8 alomundo-cs.cs
$ mbas alomundo-vb.vb
$ booc alomundo-boo.boo
$ mono alomundo-cs.exe
Alô mundo!!! em C#
$ mono alomundo-vb.exe
Alô mundo!!! em MonoBASIC
$ mono alomundo-boo.exe
Alô mundo!!! em Boo
40
A linguagem Boo foi desenvolvida pelo
Rodrigo 'Bamboo' Oliveira, para o ambiente
CLI (Mono/.NET).
É similar ao Python mas com tipagem
estática, o que lhe permite interagir mais
facilmente com as outras linguagens CLI.
Ver http://boo.codehaus.org/
42. GAMES em C#
Demos
MONO.SIMD Cases
SencondLive mudou do LSL para Mono
50x a 300x mais rápido
Unit3d
Usa C#, Boo, unityScritp
43
43. Daruma
Case Brasileiro
Apartir de Março de 2006 a
Daruma passou a surportar o uso
de suas impressoras em ambiente
Mono com Linux.
Foram realizados treinamentos da
equipe desenvolvedora no Brasil, e
foram feitas melhorias internas na
estrutura dos device drives linux
das impressoras para ficarem 100%
compatível com Mono.
44
44. Empresas usando Mono
Cases internacionais
Electronic Arts' Sims3
http://thesims3.ea.com/
Unity3D
Unity 3D é um editor de jogos cross-platform , Wii, XBOX, IPHONE, PC, etc (http://unity3d.com).
Chrome Compiler
Um compilador Pascal, Delphi (http://chromesville.com/)
DekiWiki
Is an advanced WYSIWYG Wiki system powered by Mono. (http://wiki.mindtouch.com)
SplendidCRM
Cross platform, CRM system. (http://www.splendidcrm.com)
Plasma
Source Code Management system from Codice Software.
(http://pnunit.codicesoftware.com/opproducts.aspx)
Medsphere OpenVista
A cross-platform, real-time, point-of-care, patient-centric information resource for clinicians.
(http://www.medsphere.com)
45
45. Cidade de Munich
Case internacional
Maior migração já feita para Linux
Software ActiveEntry - Software para provisão e gerenciamento
usando pelo governo Alemão. (Munich)
Foram migrados todos os servidores da cidade de
Munich para linux e portado as aplicações para Mono
http://www.novell.com/success/volcker.html
"Mono is now a critical part of our cross-platform development,"
said Matthias Bauer, head of development for Völcker Informatik
AG. "Using Mono was the only way for us to leverage our existing
software and give our customers what they need on Linux.“
Uso de C# aplicação com mais de 2milhões de linhas
350 Servidores, 40mil estações, 150mil usuários
46
50. CÓDIGO DA SESSÃO: #####
O Projeto Mono: Aplicações
.NET para sistemas não
Windows
Alessandro de Oliveira Binhara
Projeto MONO BRASIL
binhara@monobrasil.org