|
Posted
almost 12 years
ago
The GNUstep Application Project transitioned its source repository from CVS to SVN.The sources were migrated with full-history and the same directory structure.Connections detail, at the project's page about
... [More]
svn: https://savannah.nongnu.org/svn/?group=gapBrowsing can be done here: SVN SurfingThe CVS repsoitory will remain open for some time, in case something went wrong during the migration process, but it is not official or current anymore. [Less]
|
|
Posted
almost 12 years
ago
Back in the day, one of the Java slogans was "write once, run everywhere", and for a while it was quite close to being true. But not anymore. Java doesn't have much client-side presence in the browser anymore, nor has it made much ground on mobile
... [More]
devices. So for Orson Charts, I've employed a "write three times, run everywhere" approach. There is a Java version, an Android version and, now, a Javascript/HTML5 version. I could go a step further and write an Objective C version as well, but...not right now.
In fact, the Javascript/HTML5 version isn't directly written in Javascript. I ported the Java code to Google's Dart programming language, and then compiled to Javascript. Much easier! The porting effort took three weeks, including creating the web pages and writing the documentation.
The Dart team posted a screenshot of our web page with a "Built with Dart" annotation, on Google+:
It's getting some visibility, which is great, and while it is doing the rounds I will get to work on the next releases.
[Less]
|
|
Posted
almost 12 years
ago
Just back from FOSDEM (plus some recovery for a bad allergy that put me on pills and rest for the whole week after…), and I really was waiting forward to blog about that.
It has been such a great experience this year, probably one of the best I have
... [More]
memory of, despite it being also one of the most difficult to organize, or perhaps exactly because of the extra effort I had to put into it!
Nevertheless, all the pain was very well worth it, and I’ve had quite a few positive feedback from everybody, thanks!
The presentations were all of very high level, with the best talks from my point of view being Andrew Haley and Andrew Dinn talking about the ARM 64 port, Roman Kennke discussing about Shenandoah, which is the next Big Thing(TM), Volker Simonis and Goetz Lindenmaier speaking about the PowerPC port and Steve O’Grady offering a good rationale why Java is not so dead after all
All other presentations were of great interest though, the room was literally packed up, and people were basically staying all the day long sit to avoid risking to be kicked out of the room due to maximum capacity reached. This is a problem in all of FOSDEM, not just the Java DevRoom. However, I had the impression that this is even more relevant to us: with only minor exception the quantity of people we had to turn away was basically the same (and in case of Steve talk, more!) as the one that was allowed in.
This is surely due to both the popularity of the Java DevRoom, but also to the very unfortunate fact that we could not allow for recording this year, which caused some friction with FOSDEM organizers who even blamed us during the keynote.
Yes, we are cool or something. But that’s not the reason why we weren’t recording.
Part of it was due to lack of manpower and too little time to organize this properly, since the FOSDEM main organizers came with the “we record all, no exception” rule just few days before the actual conference (the whole idea came a bit earlier, although still after the games started, but was always considered “opt-in”). We also had an issue with some talks being specifically not allowed of being recorded, while others simply didn’t tell us their preference, which complicated the matter for us even more, so we just decided to skip for all. While it may or may not make sense to have such a restriction, I can understand that people don’t necessarily want to be recorded. For some is about legal matters, for others is about the shy factor that is quite common amongst hackers around the globe, for some more is just that it isn’t appropriate to record a discussion out of context. DevRoom are also a place for such events, and we ourselves had a couple of examples, one the next day when we borrowed the Valgrind DevRoom space for an AdoptOpenJDK meeting.
No matter what it is the reason, is a matter of Freedom also the ability to opt out for such things, since it gives everybody a chance to contribute to the discussion in the end. And of course, not all of FOSDEM was recorded anyway, because our issues were the same as other DevRooms, but apparently we were the only ones to say this clearly, hence the blaming. Anyway, this big misunderstanding was in turn addressed, and I’m happy we found some kind of agreement with the rest of the FOSDEM people, after all we are all part of the same ecosystem and we do care for this to stay that way, and they really listened to our reasoning and understood the problem in the end. From our side, we’ll do our best to make at least some, if not most, of the recording happening next year.
The main event closed with a great discussion with the Governing Board. I’m very happy with this because FOSDEM has been now the only public place where the Community can meet the GB and share ideas, contribute feedback and address more blaming
In fact, there was not much blaming this year at all, most of the things still open on the floor are being addressed and this public space suggested me that my own feeling about OpenJDK as a Community project were correct, the project is well and vibrant and going in the right direction!
This is much because of the good work that everybody involved is doing. While this is to be expected of course, I feel it’s important to acknowledge the role that Oracle played on all that, and I had a chance to thank some of the people representing Oracle at FOSDEM directly, like Mark and Dalibor, Cecilia and Georges, but the list goes on and on, really. It’s important that we continue with constructive feedback and help addressing issues as they come, but it’s even more important that there’s somebody listening on the other side too!
OpenJDK is still much controlled by Oracle in various aspects, but I have the feeling that is way more open than the past and contribution, without considering the obvious technical difficulty, is way easier than it used to be.
I’m also very happy that we really started the Adoption group, and to be part of it.
Once the DevRoom closed, the discussion moved to La Manifacture, with the usual dinner, once again sponsored by Oracle and for the first time RedMonk and Canonical, which is a big welcome, and I hope we will get more contributions by them, especially in the form of talks for the next year.
One news about the Libre Dinner was that this year we experimented with the Legal DevRoom (thanks Tom for making this happen!). This gave an unique opportunity for people to discuss and get introduced, expand their contacts and do even more social networking, a great opportunity for lots of business cards exchanges if you’re into this game
Pun aside, the experiment was really successful and we’ll surely do it again next time!
Overall, one of the best FOSDEM to date. And I’m already waiting forward for next year! [Less]
|
|
Posted
almost 12 years
ago
I merged OpenJDK 7u40, except for the java.lang.invoke package. To build you'll need
the new OpenJDK 7u40 based openjdk-7u40-b34-stripped.zip.
Changes:
Merged OpenJDK 7u40 b34.
... [More]
Made all bytecode helper methods available during first-pass IKVM.Runtime.dll compilation
(to avoid crashing IKVM build, if classes are missing).
Fixed ikvmc to not crash if type used in pseudo-native method signature is missing.
Refactored ikvmc -exclude: handling to allow -resource: to add .class files as resources.
Binaries available here: ikvmbin-7.4.5151.zip
Sources available here: ikvmsrc-7.4.5151.zip
The stripped OpenJDK 7u40 b34 sources are available here: openjdk-7u40-b34-stripped.zip
[Less]
|
|
Posted
almost 12 years
ago
I'll be speaking at the Java SE 8 & Java EE 7 Seminar in Utrecht on Thursday February 13, 2014.See you there!
|
|
Posted
almost 12 years
ago
When Sun’s (now Oracle’s) Java implementation was released as Free Software in 2006/7, starting the OpenJDK project, it already had over ten years of proprietary software development behind it. As a result, its codebase and build system are littered
... [More]
with assumptions and defaults designed for producing a binary blob that works on as many systems as possible. This is a very different design impetus from that of software which is developed in the open from the start, and the IcedTea project started as a way to adapt OpenJDK to this new world, and this remains one of its roles today.
Oracle still don’t provide binaries built solely from the OpenJDK codebase. Instead, their builds are based on a combination of the OpenJDK trees and their own internal proprietary trees. These have the same requirements as before, in depending on as little as possible being present on the target system. To achieve this on a GNU/Linux system, the C++ library is incorporated into the JDK binaries rather than being linked against, and the source trees include their own copies of the compression library, zlib, and imaging libraries (libjpeg, giflib, libpng, LCMS) which are then built as part of the JDK. This means that the binary will work on the target system without these libraries being present or in the required versions. For things that aren’t essential to the JDK, but provide optional extra features, the JDK will try to open the library at runtime and fail (usually silently) if it can’t be found. Examples of this include the Gtk+ look and feel and various system calls for the new NIO2 libraries in 1.7.
Such binary packages are the norm on Windows, Mac and mobile platforms, as is bringing everything you need with you. However, traditionally, GNU/Linux systems have a notion of distributions, which exist between the individual packages and the end user. You can think of choosing a GNU/Linux distribution as analogous to choosing which store you buy your groceries from. The same staples of the Linux kernel and a C library are provided by all distributions, in the same way all grocery stores stock bread and milk, but they distinguish themselves by how they package their products, what branding they apply and, as you reach more optional components, what software is included. Distributions like Fedora and Gentoo try to bring new versions of packages to their users as soon as possible, whereas others like Debian and Red Hat Enterprise Linux (RHEL) cater to those who want a more stable environment.
Access to these packages is through the package manager, which far predates the store concept that is coming of age on Windows, Mac and mobile platforms, and differs from these in that the software is usually available gratis. In including a package like OpenJDK in the package manager, distributions have very different aims to those described above. Critically, they know what packages are available and in what versions (i.e. the others provided by the package manager), so there is no need for the OpenJDK package to bundle its own copies. In fact, doing so creates problems as it increases the footprint of OpenJDK and, most importantly, prevents it from picking up on security updates made to the system copies of these libraries. For this reason, it is against the rules of a number of distributions to perform such bundling.
Since its inception, IcedTea has fixed the most problematic issues by building against the system C++, compression and imaging libraries. More recently, the IcedTea build even deletes the in-tree copies of these libraries to ensure the system version is being used. Thus, if a library like libjpeg is patched due to a security issue, the OpenJDK package will immediately benefit without having to be patched and re-built itself. With IcedTea 2.x, we went further and addressed the optional cases, where the JDK probes for libraries at runtime. In the IcedTea 2.x forests, support is provided to instead compile against these libraries. This ensures both that the code still works against the system installation of the library, and introduces a link between the JDK library and the system library which automated dependency tools can then detect.
Just this week, we’ve introduced support for compile-time building with the libpcsclite library. While this is primarily for testing (as the library needs to be interchangeable at run-time), it does mean that some basic checking of this code can be done by the compiler in development builds.
The result of all this is that someone new to IcedTea may think that it has many more dependencies than OpenJDK. However, most of these dependencies are taken from the OpenJDK codebase and are just not explicit when building it independently. Although this means it’s slightly harder to complete an IcedTea build, by the time you’ve done so, you know that all the libraries the JDK may need are present and have been compiled against, which gives a greater guarantee of runtime success than if, for example, you wait until someone fires up a graphical application using the Gtk+ look and feel and it fails. With the latest 1.13.0 release, all these options are now configurable on both 6 & 7, so you are free to make your own choices as to whether to go with a bundled or linked solution on a per-library basis. [Less]
|
|
Posted
almost 12 years
ago
The JogAmp community held a Ji Gong freedom talk that reminded people to exercise the 4 freedoms granted by the free software licenses in front of the free java developer room audience. The talk also proposed and showcased technical enhancements for
... [More]
High Availability JVM Technology on All Platforms.
Slides from the Ji Gong talk can be obtained at: https://jogamp.org/doc/fosdem2014/
During the same week JogAmp released version 2.1.4 of its high performance java opengl audio & media processing librarys.
This release includes some new highlights:
* Android OpenCL test apk’s. This enable you to compile and test an OpenCL JOCL application on desktop and then deploy on Android without using any OpenCL SDK for the phone, the JOCL binding will locate and bind the OpenCL drivers at runtime.
* Enable use of custom mouse pointers and window icons using the NEWT window and input toolkit.
* Multi window support on the Raspberry Pi including mouse-pointer use directly from console!
Complete list of bugs resolved for this 2.1.4 release can be found at:
https://jogamp.org/wiki/index.php/SW_Tracking_Report_Objectives_for_the_release_2.1.4
[Less]
|
|
Posted
almost 12 years
ago
Last weekend I’ve been talking about the Shenandoah GC at FOSDEM 2014. I announced the availability of the Shenandoah source code and project pages. Until Shenandoah becomes a proper OpenJDK project, it will be hosted on IcedTea servers. We currently
... [More]
have:
The project page. It contains short build and run instructions. It’s a bit rudimentary, but will be improved soon.
The source code repository.
A mailing list.
A bug database.
We also filed a JEP for Shenandoah, here you can find the announcement and discussion on hotspot-gc-dev.
If you are interested in the slides that I prsented at FOSDEM, you can find them here.
Implementation-wise we’re making good progress. Concurrent evacuation is working well and support for the C1 compiler is almost done. [Less]
|
|
Posted
almost 12 years
ago
Last week in Mozilla’s San Francisco office, members of the DOM, WebAPI, Accessibility, Networking, JS, Security, Add-Ons, and Apps teams gathered for discussions, hacking, and some good old face time.
Productive sessions were held on many topics.
... [More]
I’ve highlighted a few here:
Documentation
sheppy mentioned that 2014 is “The Year of Content” for MDN
not surpringly, working closely with content writers leads to better results
use dev-doc-needed keyword on bugs
use dev-doc-info keyword on bug comments that are summaries, decisions, etc.
help with technical reviews of documentation by developers is greatly appreciated
List of MDN pages in need of Web API techinical review
Useful links:
MDN contributor quick start guide
How to get docs updated for your project
Tactics & techniques for dev/doc team collaboration
File a documentation request bug
Web Workers
during discussions with Julien from the Gaia team we cleaned up and re-prioritized the list of APIs we want in workers
new APIs that have come up:
“Some API to create UI fragments” – needs lots of spec time
An image resizing API ()
Sync message channel
Kyle Huey recorded a short presentation on how Web Workers work
Service Workers
goal is to ship preffed on in nightly by the end of July, 2014 (sooner is better if possible)
DevTools help will go a long way toward helping with adoption here
https://github.com/slightlyoff/ServiceWorker/
(Incremental) Cycle Collection ((I)CC)
mccr8 and smaug recorded a presentation on cycle collection on Air Mozilla!
Do Not Track (DNT)
Monica led a discussion of how to make DNT more effective
Content Security Policy (CSP)
Discussed applying CSP to chrome resources
Decided on a direction not requiring reinvention of the system principal that creates a new context data structure that includes a principal and other stuff like CSP per document.
Referrer handling and ping
Reached consensus that we should help with site efficiency by providing mechanism to strip referrer data on client side (to avoid additional RTT and redirect on the server)
Faster and more private for all
We will follow up with potentially reducing the amount of referrer data sent by default in gecko.
Sandboxing and e10s (electrolysis)
We (mostly billm) presented the state of e10s and sandboxing on desktop and b2g, including instructions on how to test your things with e10s/sandbox enabled
General Q&A about the project architecture and current sticking points
Accessibility
Shared plan for e10s and accessibility
Lots of face-to-face hacking
Standards work
IPDL and PBackground
bent gave an overview of IPDL and PBackground in particular
we have video here and will clean it up for public consumption some time soon
Improving DOM performance
many options for improving DOM performance were discussed
the biggest thing needed is test cases
lots of action items from this session are in the raw etherpad notes (at bottom)
Apps and Marketplace requests
Harald and Vishy joined us to bring up some concerns and questions that have been voiced by the marketplace team and various partners
Networking (necko)
The networking team held 3 sessions: one to discuss improvements to the necko APIs (better off-main thread support, providing a wrapper library with security checks built in, and upgrading to async file I/O were mentioned); one on ways that layout could better set network channel priority for faster loading of visible resources; and one to map out the API needed to support Service Workers. We also made a lot of progress designing off-main websockets and support.
Web Components
dglazkov from Google came by and participated in some good discussions about Web Components
Julien Wajsberg represented the Gaia team’s needs with a discussion of Haida, the upcoming Firefox OS UX
CSS Containment could help
some other HTML5 elements may also help
Raw notes from the week with lots of links are available here: https://etherpad.mozilla.org/JSTJanWorkWeek [Less]
|
|
Posted
almost 12 years
ago
I was at FOSDEM last weekend and was reminded
that I hadn't released any IKVM.NET updates in a while. So lets try to get back on
the wagon.
Changes:
Don't use CLR v2 peverify when
... [More]
targetting CLR v4.
Support inner classes in "new style" native methods.
Bug fix. Bypass security manager check when getting ikvm.reflect.field.inflationThreshold
system property.
Bug fix. Volatile long & double fields cannot use slow path reflection, because
.NET reflection does not ensure atomic reads/writes.
Reduced the number of cases where slow-path field reflection can't be used.
Allow slow path field reflection on remapped types and handle the unsupported scenarios
explicitly.
Removed ICustomInvoke.
Changed Exception.writeReplace() method into a DynamicOnly method, because there's
no real gain in using "fast" reflection.
Bug fix. We need to promote integral values to the proper type when calling a DynamicOnly
method via reflection.
Unified the MethodWrapper.Invoke() semantics.
Added NO_REF_EMIT conditional compilation support for reflection.
Added no-ref-emit build target.
Fixed ILGenerator.EmitCalli() to not add the sentinel if there are no varargs.
Reimplemented JNI non-virtual method invocation based on delegates instead of DynamicMethod.
Emit non-virtual invocation delegate types when compiling with the -static option.
Made annotation custom attribute decoding lazy to work around issue reported in #270.
Removed unneeded use of reflection from AnnotationAttributeBase.
Made accidentally public methods AnnotationAttributeBase.newAnnotation() and AnnotationAttributeBase.decodeElementValue()
internal.
Made AnnotationAttributeBase.writeReplace() method private.
Fixed various minor AnnotationAttributeBase issues.
Added (partial) support for Java 8 MethodParameters attribute.
Introduced EMITTERS conditional compilation constant.
Added a (partial) NO_REF_EMIT implementation of the DynamicCreateDelegate error hander.
If ikvmc -static option is used, don't add the InternalsVisibleTo("...-ikvm-runtime-injected")
attribute.
Validate constant pool items referenced by EnclosingMethod attribute.
Updated Mono workaround for Mono 3.0.x.
Don't issue "warning IKVMC0100: Class "{0}" not found" for types that are only used
in signatures.
Fixed JInternalFrame paint issue.
Performance fix. When throwing a ClassNotFoundException from Class.forName() or AssemblyClassLoader.loadClass()
we should avoid calling fillInStackTrace() on the exception.
Bug fix. Check for supported delegate signatures should detect pointers inside byref
and array types and return type should be checked as well.
Bug fix. Fake nested types should have Static modifier set in innerclasses attribute.
Fixes scala compiler interop issue. Thanks to Michael Bayne for reporting this.
Bug fix. ikvmstub -skiperror should also skip errors during WriteClass.
Handle signatures with function pointer types in ikvmc and ikvmstub.
Made BufferedImage.toBitmap() package private.
Fixed BufferedImage sync issues.
Add @Repeatable annotation to custom attribute annotations that AllowMultiple (when
IKVM_EXPERIMENTAL_JDK_8 is defined).
Implemented getCurrentThreadCpuTime in management API.
Added support for binding method handles to methods that require CallerID.
Bug fix. String.CaseInsensitiveComparator inner class should be acknowledged by String.
Removed -X options from standard help text and added -X option to print -X options.
Change class format error exception message for missing Code attribute to same text
as OpenJDK.
Allow Java 8 classes to use invokeStatic method handle constants that refer to InterfaceMethodref.
Bug fix. Non-blocking SocketChannel read/write with array of ByteBuffer would throw
exception instead of returning 0 bytes read/written when no more buffer space is available.
Don't add SourceFileAttribute for inner classes if the name matches the outer class.
Use StringComparison.Ordinal when checking inner vs outer class names.
Compile anonymous and local classes as nested types.
Don't store class name in EnclosingMethodAttribute if we can use the DeclaringType.
Added optimization to omit ImplementAttribute in some cases.
Added optimization to omit InnerClassesAttribute to record reflective modifiers when
we can predict them.
Updated java.sql.DriverManager to OpenJDK 7 (somehow this file was previously missed).
Merged in some missing changes in java.io.ObjectStreamClass.
Switched from @HasCallerID to @CallerSensitive and merged CallerSenstive related 7u40
changes.
Added ikvmstub -parameters option to add parameter names to stub classes.
Updated Throwable.initCause() and Throwable.addSuppressed() exceptions to match OpenJDK
7u40.
Fixed the SHFILEINFO declaration. Thanks to Andras Kovacs for reporting this.
Merged OpenJDK 7u40 changes to use SO_EXCLUSIVEADDRUSE for datagram sockets that don't
use SO_REUSEADDR.
If an annotation is inconsistent with the annotation type, we should still record
it as a dynamic annotation.
If an annotation's type does not exist, the annotation should be ignored instead of
throwing an exception.
If an annotation is (no longer) RetentionPolicy.RUNTIME it should not be returned.
If an annotation is of a type that is not an annotation, it should be ignored.
Annotations that contain no longer existing values should not fail, but just ignore
the value.
Class or enum values in annotations that refer to non-existing types should use TypeNotPresentExceptionProxy
as the value, instead of failing to create the annotation.
Emulate some JDK annotation bugs.
If an annotation value is of the wrong type, use AnnotationTypeMismatchExceptionProxy
as the value, instead of failing to create the annotation.
Fixed handling of annotations with invalid type signatures.
Fixed race condition in MethodWrapper.ResolveMethod().
Fix for bug #282. A potential
fault block can't throw an exception from another fault block.
Improved trace message for JNI loadLibrary failure.
Improved handling of missing types (from missing assemblies in ikvmc).
Avoid reflection in creating ConditionalWeakTable value objects. Thanks to Michael
Bayne for the idea.
Fixed method handle custom invoke to downcast the return type. Without the cast .NET
4.0 would throw a verification exception.
Implemented the StandardGlypVector constuctor with glyphs
Bug fix. JNI NewStringUTF should accept null pointer.
Bug fix. JNI Throw(NULL) should not clear pending exception.
Bug fix. JNI ThrowNew(..., NULL) should use default constructor.
Fixed initialization order issue. Don't abuse System.out to check if class library
intialization is complete.
Bug fix. If a property getter/setter is accessed in a static initializer, it is not
side-effect free.
IKVM.Reflection: Fixed DefineDynamicAssembly() overload taking an IEnumerable
to accept null.
IKVM.Reflection: Added new .NET 4.5 static AssemblyBuilder.DefineDynamicAssembly()
methods. They implicitly create a universe.
IKVM.Reflection: Added Universe.FromAssembly() API.
IKVM.Reflection: Bug fix. Fixed NRE in __StandAloneMethodSig.ContainsMissingType.
IKVM.Reflection: Use StringComparison.OrdinalIgnoreCase instead of StringComparison.InvariantCultureIgnoreCase.
IKVM.Reflection: Fixed unmanaged export table name sorting.
IKVM.Reflection: Expose ImageRuntimeVersion and MDStreamVersion on RawModule.
IKVM.Reflection: Bug fix. Assembly.Location should return "" instead of null, if there
is no location.
IKVM.Reflection: Added Universe.OpenMappedRawModule() API to enable reading modules
from memory or a crash dump file.
IKVM.Reflection: Fixed assembly name parsing to handle quoted keys and values. Thanks
to Ian Battersby for reporting this.
IKVM.Reflection: Added the 4.5 (reference) assemblies to the framework list. The previous
assumption was that we only need to add assemblies for previous frameworks, but that
turns out to be incorrect because the list affects CompareAssemblyIdentity() which
returns EquivalentFXUnified for framework assemblies.
IKVM.Reflection: ProcessorArchitecture should be read from flags and not its own field.
This fixes the bug that GetReferencedAssemblies() did not return the ProcessorArchitecture
part of the assembly flags.
IKVM.Reflection: Fixed assembly reference resolution issues (Name was not escape,
Retargetable and ContentType attributes were not added, PublicKey was not converted
to PublicKeyToken).
IKVM.Reflection: Fixed CompareAssemblyIdentity handling of Retargetable and added
PublicKeyToken remapping.
IKVM.Reflection: Implemented WinMD projection support.
IKVM.Reflection: Fixed WindowsRuntime assembly detection (for projection purposes).
IKVM.Reflection: Added projection support for mixed CLR/WindowsRuntime assemblies.
IKVM.Reflection: Rewrote assembly name comparison to better handle remapping and Retargetable.
IKVM.Reflection: Moved version number parsing out of assembly name parser, because
it turns out that AssemblyName and Fusion use different version number parsing rules.
IKVM.Reflection: Bug fix. ExceptionHandler.Equals(object) called itself instead of
Equals(ExceptionHandler).
IKVM.Reflection: Only (incorrectly) set the TypeDefId for exported types from another
assembly if we're targetting .NET 2.0 where .NET does so too and peverify warns if
it isn't set.
IKVM.Reflection: Added new overload for __AddTypeForwarder() that takes an additional
bool to disable automatically forwarding nested types.
IKVM.Reflection: Fix for bug #283.
IKVM.Reflection: Throw TypeLoadException when exported type (indirectly) points to
itself.
IKVM.Reflection: When a cyclic type forwarder is found and UniverseOptions.ResolveMissingMembers
is set, we should not throw an exception but instead create a missing type. Added
a new Type.__IsCyclicTypeForwarder property to allow detecting this case.
IKVM.Reflection: Bug fix. Assembly may contain both PublicKeyToken and PublicKey if
they are the same identity.
Binaries available here: ikvmbin-7.4.5148.zip
[Less]
|