我已经在Linux上使用Mono大约三年,最近也开始在OS X上使用它。在Linux上有些东西相当复杂,但在OS X上只有一些简单的ASP.NET MVC2应用程序。
1)对我来说,Mono的性能从未是个问题。这并不是说性能不重要,只是Mono自身的性能从未成为问题。我所做的很多工作都基于Web,因此在Mono之前,I/O和数据库内存使用率就已经影响到我了。
历史上,Mono最大的缺陷是垃圾回收器(GC)。我会说Java在这方面调优得更好。最新版本的Mono在这方面取得了巨大进步,但我无法为您提供任何比较的硬数据。
我确信Mono有时会更快,Java有时会更快,但我会说Java总体上更快。
2)您可以使用makefiles进行Mono开发。Mono团队本身也这样做。您当然可以使用Emacs,而且它还有一个C#模式。
我倾向于使用MonoDevelop和xbuild(类似于msbuild的Mono版本),而且没有在Emacs中进行C#编程的经验。MonoDevelop非常棒,因为它在所有平台上都是完全相同的。而且,虽然我很少再使用它了,但与Visual Studio和SharpDevelop的项目格式相同也是很好的。
3)MonoDevelop具有相当不错的代码重构支持。它在Windows、Linux和Mac上都一样。您不需要使用Windows进行开发(尽管您肯定可以这样做),但我认为使用像MonoDevelop这样的IDE会让您更加满意。一旦您习惯了智能感知等功能,就很难离开它了。但是,集成调试、能够深入到框架中、数据库集成、单元测试、SCM集成以及其他良好的工具支持都在同一个地方,这对我来说只是正确的选择。
4)Mono本身当然不关心版本控制。您的源文件只是文本,您可以使用任何方法来管理它们。
尽管如此,MonoDevelop IDE内置了非常好的Subversion支持。我广泛使用它,并且这也是我即使在Windows上仍然难以离开MonoDevelop的原因之一。最新版本的MonoDevelop(2.6 beta)还包括Git支持。
你没有提到单元测试,但是MonoDevelop还将NUnit支持构建到了IDE中。我在每个项目中都使用它,它表现优秀。MonoDevelop中的版本是2.4.8(如果我没记错的话),所以它不太符合当下的标准,但是它依然很好用。
总而言之,Mono与开源工具配合得十分良好。它一直对我来说都表现得非常出色。
当然,Autoconf自身被Mono项目使用,但作为Mono开发人员,我从未看到有需要使用它的情况。我努力只在我的项目中使用托管代码。因此,在目标平台上所需要的全部仅仅是Mono(或.NET)。不必担心所有这些东西对于像Mono或Java这样的托管环境而言是其中一个主要好处。运行时本身(CLR)确保我的应用程序具备了其正常运行所需的一切条件。
我知道MonoDevelop将构建autoconf/autorun文件用于C/C++项目(非Mono项目),但我自己并没有使用过它。
至于之前的评论,显然Mono JIT已经调整到了目标平台。这就是平台特定的性能调整所发生的地方。
仅仅作为一条评论,我认为最好将Mono视为一个独立的开发环境而非Microsoft兼容层。Mono团队以许多有趣的方式扩展了.NET。你为Mono开发的任何东西都将在.NET上运行,但是有一些.NET功能不适用于Mono。例如,Mono不支持Windows Presentation Foundation(WPF)。你必须使用Windows Forms或GTK#进行跨平台GUI工作。在Mac上,你也可以使用类似Cocoa#或MonoMac的东西,在iPhone上使用MonoTouch,在Android上使用MonoDroid。你也可以使用Moonlight代替Silverlight,尽管我还没有玩得很多。
既然您问到Java,还有一件事情要说。有几次我发现Java世界中有些库在.NET世界中找不到相应的等价物。在这些情况下,我使用IKVM.NET将它们集成到我的Mono应用程序中时非常幸运。IKVM.NET也适用于.NET,但Mono和IKVM.NET非常亲密,甚至共享一些代码。
所以,至少给您一个真实的答案。