February 21st, 2010
IKVM - Java로 .NET 애플리케이션 만들기

IKVM은 멋지구리다.
.NET세상과 Java세상의 접목에 대한 상상을 대부분 처리해 준다.
한 문장으로 '.NET으로 구현한 JVM' 이라고 하지만 실상은 그 보다 기특하더군.
다음 3가지 툴이 핵심이다.

  1. ikvm : JVM on .NET (dynamic mode)
  2. ikvmc : *.class / *.jar -> *.DLL or *.EXE(.NET assembly) converter
  3. ikvmstub : Generate *.JAR(bodyless stub classes) from .DLL(.NET assembly)

간단히 설명하면,
1)은 사용자입장에서는 Sun이외의 다른회사의 JVM이다. 기존에 'java -jar HelloWorld.jar'를 'ikvm -jar HelloWorld.jar'로 바꿔사용 하면 된다. VM이 .NET으로 구현되었다고 하지만 어짜라구? 어찌됬던 runtime에 java bytecode -> .NET CIL 로 변환하기 때문에 좀 느리단다.

2)는 1)보다 재미있다. 일반 .NET application 처럼 .exe 혹은 .dll을 만들어 준다. 즉, 'java -jar HelloWorkd.jar'가 아니라 'HelloWorld.exe'가 된다. first class .NET assembly이기 때문에 1)보다 실행도 빠르다. 다음 간단한 예제를 적용해 보았다.

JAVA:
  1. <br />
  2. package net.hanjava.dotnet;</p>
  3. <p>public class HelloProperties {<br />
  4.     public static void main(String... args) {<br />
  5.         System.getProperties().list(System.out);<br />
  6.     }<br />
  7. }<br />

ikvmc -target:exe -main:net.hanjava.dotnet.HelloProperties bin\net\hanjava\dotnet\HelloProperties.class 하고 실행하면

이런... deployment always sucks!!
가장 심오한 해결책으로 IKVM 디렉토리로 HelloProperties.exe를 옮기고 실행..

JAVA:
  1. <br />
  2. -- listing properties --<br />
  3. java.runtime.name=IKVM.NET<br />
  4. sun.boot.library.path=C:\.virtual-ikvm-home\bin<br />
  5. java.vm.version=0.40.0.1<br />
  6. java.vm.vendor=Jeroen Frijters<br />
  7. java.vendor.url=http://ikvm.net/<br />
  8. path.separator=;<br />
  9. java.vm.name=IKVM.NET<br />
  10. file.encoding.pkg=sun.io<br />
  11. user.country=KR<br />
  12. sun.os.patch.level=<br />
  13. java.vm.specification.name=Java Virtual Machine Specification<br />
  14. user.dir=C:\IKVM<br />
  15. java.runtime.version=0.40.0.1<br />
  16. os.arch=x86<br />
  17. java.io.tmpdir=C:\Documents and Settings\behumble\Lo...<br />
  18. line.separator=</p>
  19. <p>java.vm.specification.vendor=Sun Microsystems Inc.<br />
  20. user.variant=<br />
  21. os.name=Windows XP<br />
  22. gnu.classpath.version=0.95<br />
  23. java.library.path=C:\IKVM;.;C:\WINDOWS\Sun\Java\bin;C:\...<br />
  24. java.specification.name=Java Platform API Specification<br />
  25. java.class.version=50.0<br />
  26. os.version=5.1<br />
  27. user.home=C:\Documents and Settings\behumble<br />
  28. user.timezone=<br />
  29. gnu.javax.swing.noGraphics2D=true<br />
  30. file.encoding=ks_c_5601-1987<br />
  31. java.specification.version=1.6<br />
  32. user.name=behumble<br />
  33. java.class.path=<br />
  34. java.vm.specification.version=1.0<br />
  35. sun.arch.data.model=32<br />
  36. java.home=C:\.virtual-ikvm-home<br />
  37. java.specification.vendor=Sun Microsystems Inc.<br />
  38. user.language=ko<br />
  39. openjdk.version=OpenJDK 6 b12<br />
  40. awt.toolkit=ikvm.awt.NetToolkit, IKVM.AWT.WinForm...<br />
  41. java.vm.info=compiled mode<br />
  42. sun.nio.MaxDirectMemorySize=-1<br />
  43. java.version=1.6.0<br />
  44. java.ext.dirs=<br />
  45. java.vendor=Jeroen Frijters<br />
  46. file.separator=\<br />
  47. java.vendor.url.bug=http://www.ikvm.net/bugs<br />
  48. sun.cpu.endian=little<br />

3) ikvmstub mscorlib.dll 하면 mscorlib.jar를 생성해 준다. 이제 자바 코드로 .NET library를 호출할 수 있다.
당연한 이야기지만 stub만 생성된다. CIL을 해석해서 bytecode로 변경해주는 일 따위는 안한다.

막상 중요한 .NET과 Java의 interop은 상상의 날개를 펼치면 된다.

그런데 이런 짓은 왜 하지?

February 16th, 2010
해적판 ThinkFree Mobile for android

중국사이트에서 ThinkFree Mobile for android가 발견되었다.
무려 친절한 중국어 screenshot까지 첨부되었다.

이거야 원.. 자랑스럽다..

다운로드 받아서 실행해 보니 archos에 나간 버젼이구나.
archos.png

ARCHOS 장비에서만 수행되게 lock을 거는게 좋을거 같다.