JaroslavTulach at 05:55, 26 March 2022 - 2022-03-26 05:55:27

←Older revision Revision as of 05:55, 26 March 2022
Line 28: Line 28:
You have probably seen thousands of successful applications of the ''copying'' when developing an in-house software. Be it quick sort code you copied from [[StackOverFlow]] website or some [[Open source]] library you rather copied to not have to do with legal implications of its license.
You have probably seen thousands of successful applications of the ''copying'' when developing an in-house software. Be it quick sort code you copied from [[StackOverFlow]] website or some [[Open source]] library you rather copied to not have to do with legal implications of its license.
-
There are companies building their business on copying [[OpenJDK]] and shipping it with ''minor modifications'' - for example with a better garbage collection algorithm or better final tier compiler. It does work. What can be the conclusion?
+
There are companies building their business on copying [[OpenJDK]] and shipping it with ''minor modifications'' - for example with a better [[Garbage Collection]] algorithm or better final tier compiler. It does work. What can be the conclusion?
''We have seen it working! Let's repeat the previous success''! Again and again ... until we find out it doesn't work in the Universe of [[API]]s!
''We have seen it working! Let's repeat the previous success''! Again and again ... until we find out it doesn't work in the Universe of [[API]]s!

JaroslavTulach: /* C# vs. Android */ - 2021-06-29 09:38:55

C# vs. Android

←Older revision Revision as of 09:38, 29 June 2021
Line 32: Line 32:
''We have seen it working! Let's repeat the previous success''! Again and again ... until we find out it doesn't work in the Universe of [[API]]s!
''We have seen it working! Let's repeat the previous success''! Again and again ... until we find out it doesn't work in the Universe of [[API]]s!
-
== C# vs. [[Android]] ==
+
== C#/.Net vs. [[Android]] ==
At the end of last century [[Microsoft]] abandoned [[Java]] due to lawsuit with [[Sun]]. However, as the promise of [[Java]] was really huge, [[Microsoft]] decided to create its own copy called [[CSharp]]. Clearly inspired by the [[Java]] concepts and while fixing some of the [[Java]] problems, it even become nicknamed [[Java]] 2.0. Where's [[CSharp]] now? I don't know and I don't care!
At the end of last century [[Microsoft]] abandoned [[Java]] due to lawsuit with [[Sun]]. However, as the promise of [[Java]] was really huge, [[Microsoft]] decided to create its own copy called [[CSharp]]. Clearly inspired by the [[Java]] concepts and while fixing some of the [[Java]] problems, it even become nicknamed [[Java]] 2.0. Where's [[CSharp]] now? I don't know and I don't care!

JaroslavTulach: /* Copying Genes vs. Species */ - 2021-06-29 07:00:27

Copying Genes vs. Species

←Older revision Revision as of 07:00, 29 June 2021
Line 18: Line 18:
Doing ''major copying changes'' may have some short term benefits, but it is a dead-end from [[evolution]] perspective.
Doing ''major copying changes'' may have some short term benefits, but it is a dead-end from [[evolution]] perspective.
-
Very likely we can go even further - if you copy fifteen human chromosomes to produce a creature that can actually live - will it be able to participate in the [[evolution]] of humans? Unlikely. If it is able to evolve at all, it is going to become completely new species. The [[evolution]] will only be possible in the isolated species - mixing and sharing achievements between the original and the new species will not be possible.
+
Very likely we can go even further - if you copy just fifteen human chromosomes to produce a creature that can actually live - will it be able to participate in the [[evolution]] of humans? Unlikely. If it is able to evolve at all, it is going to become completely new species. The [[evolution]] will only be possible in the isolated species - mixing and sharing achievements between the original and the new species will not be possible.
May it be [[God]]'s will? Maybe, but it clearly shows the difference between ''minor'' change and a ''major'' change when making a copy!
May it be [[God]]'s will? Maybe, but it clearly shows the difference between ''minor'' change and a ''major'' change when making a copy!

JaroslavTulach: /* C# vs. Android */ - 2021-06-23 07:59:56

C# vs. Android

←Older revision Revision as of 07:59, 23 June 2021
Line 34: Line 34:
== C# vs. [[Android]] ==
== C# vs. [[Android]] ==
-
At the end of last century [[Microsoft]] abandoned [[Java]] due to lawsuit with [[Sun]]. However, as the promise of [[Java]] was really huge, [[Microsoft]] decided to create its own copy called [[CSharp]]. Clearly inspired by the [[Java]] concepts and while fixing some of the [[Java]] problems, it even become called [[Java]] 2.0. Where's [[CSharp]] now? I don't know and I don't care!
+
At the end of last century [[Microsoft]] abandoned [[Java]] due to lawsuit with [[Sun]]. However, as the promise of [[Java]] was really huge, [[Microsoft]] decided to create its own copy called [[CSharp]]. Clearly inspired by the [[Java]] concepts and while fixing some of the [[Java]] problems, it even become nicknamed [[Java]] 2.0. Where's [[CSharp]] now? I don't know and I don't care!
[[Java]] and [[CSharp]] become its own species without any [[common ground]]. From time to time they influence each other with ideas (there is [[JUnit]] and '''NUnit''' or [[Ant]] and '''NAnt'''), but they never straighten each other. Attempts to make a language like [[Scala]] compile to [[Java]] bytecode as well as [[CSharp]]'s one died out. The copy was so ''major'' that - while it gained some traction initially - it matters less and less.
[[Java]] and [[CSharp]] become its own species without any [[common ground]]. From time to time they influence each other with ideas (there is [[JUnit]] and '''NUnit''' or [[Ant]] and '''NAnt'''), but they never straighten each other. Attempts to make a language like [[Scala]] compile to [[Java]] bytecode as well as [[CSharp]]'s one died out. The copy was so ''major'' that - while it gained some traction initially - it matters less and less.

JaroslavTulach at 13:33, 22 June 2021 - 2021-06-22 13:33:40

←Older revision Revision as of 13:33, 22 June 2021
Line 48: Line 48:
== [[Genetics]] of an [[APIDesign]] ==
== [[Genetics]] of an [[APIDesign]] ==
-
[[API]] is what defines a species! Different implementations or users of the [[API]] are then creatures that [[evolution|evolve]] together and straighten each other!
+
[[API]] is what defines a species! Different implementations or users of the [[API]] are then creatures that [[evolution|evolve]] together and straighten each other! [[API]]s shall not be copied, but only re-implemented. That's the [[paradox]] of ''copying'' an [[API]]!
 +
 
 +
 
 +
[[Category:APIDesignPatterns]]
 +
[[Category:APIDesignPatterns:Paradox]]

JaroslavTulach: /* Copying APIs vs. Species */ - 2021-06-22 13:30:57

Copying APIs vs. Species

←Older revision Revision as of 13:30, 22 June 2021
Line 42: Line 42:
== Copying [[API]]s vs. Species ==
== Copying [[API]]s vs. Species ==
-
If you want your copy or rather re-implementation of some [[API]]s to participate in overall ecosystem and truly benefit from previous as well as future [[evolution]], you have to copy just the implementation - not the [[API]]s. The [[API]] have to remain the same. They serve as a facade that allows people write one code and interact with both ''creatures''. In the [[genetics]] allegory - you want to invent new color of an eye, but not a third eye and excommunicate own-self from the existing species. Staying in the existing species is what [[evolution]] likes. At the end it may even bring you more benefits like better tooling, new languages, more libraries, etc.
+
If you want your copy or rather re-implementation of some [[API]]s to participate in overall ecosystem and truly benefit from previous as well as future [[evolution]], you have to copy just the implementation - not the [[API]]s. The [[API]] - e.g. the facade - has to remain the same. People need to be able to ''write one code'' and interact with ''both creatures''. In the [[genetics]] allegory - you want to invent new color of an eye, but not a third eye and excommunicate own-self from the existing species. Staying in the existing species is what [[evolution]] likes. At the end it may even bring you more benefits like better tooling, new languages, more libraries, etc.
If you copy the [[API]] ideas instead and create own species from a scratch, you are likely to end up like [[CSharp]] - useful, but always second - [[Intelligent design|intelligently designed]] but only of interest by a single designer and its gang!
If you copy the [[API]] ideas instead and create own species from a scratch, you are likely to end up like [[CSharp]] - useful, but always second - [[Intelligent design|intelligently designed]] but only of interest by a single designer and its gang!

JaroslavTulach: /* C# vs. Android */ - 2021-06-22 13:29:40

C# vs. Android

←Older revision Revision as of 13:29, 22 June 2021
Line 38: Line 38:
[[Java]] and [[CSharp]] become its own species without any [[common ground]]. From time to time they influence each other with ideas (there is [[JUnit]] and '''NUnit''' or [[Ant]] and '''NAnt'''), but they never straighten each other. Attempts to make a language like [[Scala]] compile to [[Java]] bytecode as well as [[CSharp]]'s one died out. The copy was so ''major'' that - while it gained some traction initially - it matters less and less.
[[Java]] and [[CSharp]] become its own species without any [[common ground]]. From time to time they influence each other with ideas (there is [[JUnit]] and '''NUnit''' or [[Ant]] and '''NAnt'''), but they never straighten each other. Attempts to make a language like [[Scala]] compile to [[Java]] bytecode as well as [[CSharp]]'s one died out. The copy was so ''major'' that - while it gained some traction initially - it matters less and less.
-
[[Android]], as introduced in 2008, is a completely different beast. While different, it could run [[Java]] programs since the beginning. Not every library was ready for [[Android]], but adjusting them to run on both systems - [[HotSpot]] and [[Android]] - was possible and after few years all major libraries and frameworks could run on both. Since then the ecosystems straighten each other. [[Android]] Studio - the official tooling for [[Android]] fuels tooling for the whole [[Java]] ecosystem. [[Kotlin]] language (introduced to mitigate possible damage of Google vs. Oracle lawsuit) is becoming more and more popular in non-[[Android]] space as well. [[Android]] gained a significant advantage because it looked like, behave and really worked as a ''minor copy'' of [[Java]].
+
[[Android]], as introduced in 2008, is a completely different beast. While different, it could run [[Java]] programs since the beginning. Not every library was ready for [[Android]], but adjusting them to run on both systems - [[HotSpot]] and [[Android]] - was possible and after few years all major libraries and frameworks could run on both. Since then the ecosystems straighten each other. [[Android]] Studio - the official tooling for [[Android]] fuels tooling for the whole [[Java]] ecosystem. [[Kotlin]] language (introduced to mitigate possible damage of Google vs. Oracle lawsuit) is becoming more and more popular in non-[[Android]] space as well. [[Android]] gained a significant advantage because it looked like, behaved and really worked as a ''minor copy'' of [[Java]].
== Copying [[API]]s vs. Species ==
== Copying [[API]]s vs. Species ==

JaroslavTulach: /* C# vs. Android */ - 2021-06-22 13:27:57

C# vs. Android

←Older revision Revision as of 13:27, 22 June 2021
Line 34: Line 34:
== C# vs. [[Android]] ==
== C# vs. [[Android]] ==
-
At the end of last century [[Microsoft]] abandoned [[Java]] due to lawsuit with [[Sun]]. However, as the promise of [[Java]] was really huge, [[Microsoft]] decided to create its own copy of called [[CSharp]]. Clearly inspired by the [[Java]] concepts and while fixing some of the [[Java]] problems, it even become called [[Java]] 2.0. Where's [[CSharp]] now? I don't know and I don't care!
+
At the end of last century [[Microsoft]] abandoned [[Java]] due to lawsuit with [[Sun]]. However, as the promise of [[Java]] was really huge, [[Microsoft]] decided to create its own copy called [[CSharp]]. Clearly inspired by the [[Java]] concepts and while fixing some of the [[Java]] problems, it even become called [[Java]] 2.0. Where's [[CSharp]] now? I don't know and I don't care!
[[Java]] and [[CSharp]] become its own species without any [[common ground]]. From time to time they influence each other with ideas (there is [[JUnit]] and '''NUnit''' or [[Ant]] and '''NAnt'''), but they never straighten each other. Attempts to make a language like [[Scala]] compile to [[Java]] bytecode as well as [[CSharp]]'s one died out. The copy was so ''major'' that - while it gained some traction initially - it matters less and less.
[[Java]] and [[CSharp]] become its own species without any [[common ground]]. From time to time they influence each other with ideas (there is [[JUnit]] and '''NUnit''' or [[Ant]] and '''NAnt'''), but they never straighten each other. Attempts to make a language like [[Scala]] compile to [[Java]] bytecode as well as [[CSharp]]'s one died out. The copy was so ''major'' that - while it gained some traction initially - it matters less and less.

JaroslavTulach: /* Copying In House */ - 2021-06-22 13:27:30

Copying In House

←Older revision Revision as of 13:27, 22 June 2021
Line 28: Line 28:
You have probably seen thousands of successful applications of the ''copying'' when developing an in-house software. Be it quick sort code you copied from [[StackOverFlow]] website or some [[Open source]] library you rather copied to not have to do with legal implications of its license.
You have probably seen thousands of successful applications of the ''copying'' when developing an in-house software. Be it quick sort code you copied from [[StackOverFlow]] website or some [[Open source]] library you rather copied to not have to do with legal implications of its license.
-
There are companies building their business on copying [[OpenJDK]] and shipping it with ''minor modifications'' - for example with a better garbage collection algorithm or better final tier compiler. We have seen it working! Let's repeat the previous success again and again ... until we find out it doesn't work in the Universe of [[API]]s!
+
There are companies building their business on copying [[OpenJDK]] and shipping it with ''minor modifications'' - for example with a better garbage collection algorithm or better final tier compiler. It does work. What can be the conclusion?
 +
 
 +
''We have seen it working! Let's repeat the previous success''! Again and again ... until we find out it doesn't work in the Universe of [[API]]s!
== C# vs. [[Android]] ==
== C# vs. [[Android]] ==

JaroslavTulach: /* Copying Genes vs. Species */ - 2021-06-22 13:25:43

Copying Genes vs. Species

←Older revision Revision as of 13:25, 22 June 2021
Line 18: Line 18:
Doing ''major copying changes'' may have some short term benefits, but it is a dead-end from [[evolution]] perspective.
Doing ''major copying changes'' may have some short term benefits, but it is a dead-end from [[evolution]] perspective.
-
Very likely we can go even further - if you copy fifteen human chromosomes and produces a creature that can actually live - will it be able to participate in the [[evolution]] of humans? Unlikely. If it is able to evolve at all, it is going to become completely new species. The [[evolution]] will only be possible in the isolated species - mixing and sharing achievements between the original and the new species will not be possible.
+
Very likely we can go even further - if you copy fifteen human chromosomes to produce a creature that can actually live - will it be able to participate in the [[evolution]] of humans? Unlikely. If it is able to evolve at all, it is going to become completely new species. The [[evolution]] will only be possible in the isolated species - mixing and sharing achievements between the original and the new species will not be possible.
May it be [[God]]'s will? Maybe, but it clearly shows the difference between ''minor'' change and a ''major'' change when making a copy!
May it be [[God]]'s will? Maybe, but it clearly shows the difference between ''minor'' change and a ''major'' change when making a copy!