<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Oracle Archive - CEOsBay</title>
	<atom:link href="https://ceosbay.com/tag/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>https://ceosbay.com/tag/oracle/</link>
	<description>It&#039;s all about Tech</description>
	<lastBuildDate>Sun, 16 Apr 2023 10:03:47 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://i0.wp.com/ceosbay.com/wp-content/uploads/2022/11/image.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Oracle Archive - CEOsBay</title>
	<link>https://ceosbay.com/tag/oracle/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211828771</site>	<item>
		<title>Java &#8211; Endlose Möglichkeiten der Softwareentwicklung</title>
		<link>https://ceosbay.com/2023/03/16/erklaerung-java/</link>
					<comments>https://ceosbay.com/2023/03/16/erklaerung-java/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 16 Mar 2023 18:24:29 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[32]]></category>
		<category><![CDATA[754]]></category>
		<category><![CDATA[Annotationen]]></category>
		<category><![CDATA[Applets]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Bytecode]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[Classpath]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Einsatz]]></category>
		<category><![CDATA[Entwickeln]]></category>
		<category><![CDATA[Entwicklungsumgebungen]]></category>
		<category><![CDATA[Float]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[Gosling]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[IEEE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDK]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[Klassen]]></category>
		<category><![CDATA[Kompilieren]]></category>
		<category><![CDATA[Laufzeitumgebung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Machine]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Microsystems]]></category>
		<category><![CDATA[Multithreading]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Objektorientiert]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Reflexion]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Sun]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[Virtual]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XCode]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1168</guid>

					<description><![CDATA[<p>Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems. Dieser Beitrag ist verhältnismäßig etwas länger bzw. auf mehrere Teile aufgeteilt, da ich derzeit Java erlerne. Oracle hat es im Jahr 2010 &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java &#8211; Endlose Möglichkeiten der Softwareentwicklung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems. Dieser Beitrag ist verhältnismäßig etwas länger bzw. auf mehrere Teile aufgeteilt, da ich derzeit Java erlerne. Oracle hat es im Jahr 2010 aufgekauft. Die Programmiersprache ist ein Bestandteil der Java-Technologie. Sie besteht grundsätzlich aus dem Java-Entwicklungswerkzeug (JDK) zum Erstellen von Java-Anwendungen und der Laufzeitumgebung (JRE) zu deren Ausführung. Die Laufzeitumgebung selbst umfasst die virtuelle Maschine (JVM) und die mitgelieferten Bibliotheken. Java als Programmiersprache sollte nicht mit der Java-Technologie gleichgesetzt werden; Java-Laufzeitumgebungen führen Bytecode aus, der sowohl aus der Programmiersprache Java als auch aus anderen Programmiersprachen wie Groovy, Kotlin und Scala kompiliert werden kann. Im Prinzip kann jede Programmiersprache als Grundlage für Java-Bytecode genutzt werden, meistens existieren aber keine entsprechenden Bytecode-Compiler. Was ein Compiler ist, thematisiere ich noch in einem zukünftigen Beitrag.</p>



<p>Die Programmiersprache Java dient innerhalb der Java-Technologie vor allem zum Formulieren von Programmen. Diese liegen zunächst als reiner, menschenverständlicher Text vor, dem sogenannten Quellcode. Dieser Quellcode ist nicht direkt ausführbar. Erst der Java-Compiler, der Teil des Entwicklungswerkzeugs ist, übersetzt es in die Maschinensprache Java-Bytecode. Die Maschine, die diesen Bytecode ausführt, ist jedoch typischerweise virtuell. Folglich findet die Ausführung nicht direkt über die Hardware bzw. etwa einem Mikroprozessor ausgeführt, sondern durch entsprechende Software auf der Zielplattform.</p>



<p>Zweck der Virtualisierung ist die Plattformunabhängigkeit. Das Programm soll ohne weitere Änderung auf jeder Rechnerarchitektur laufen, wenn dort eine passende Laufzeitumgebung installiert ist. Oracle selbst bietet Laufzeitumgebungen für die Betriebssysteme <a href="https://ceosbay.com/2022/11/22/erklaerung-linux/" target="_blank" rel="noreferrer noopener">Linux</a>, macOS, Solaris und Windows an. Andere Hersteller lassen eigene Java-Laufzeitumgebungen für ihre Plattform zertifizieren. Auch in Autos, HiFi-Anlagen und anderen elektronischen Geräten wird Java verwendet.</p>



<p>Um die Ausführungsgeschwindigkeit zu erhöhen, werden Konzepte wie die Just-in-time-Kompilierung und die Hotspot-Optimierung verwendet. In Bezug auf den eigentlichen Ausführungsvorgang kann die JVM den Bytecode so interpretieren, bei Bedarf jedoch auch kompilieren und optimieren.</p>



<h3 class="wp-block-heading">Eine kurze Zeitreise</h3>



<p>Im Grunde genommen ist es eine Person, die für die Entstehung der objektorientierten Programmiersprache Java verantwortlich ist. James Gosling.</p>



<p>James Gosling schloss sein Studium an der University of Calgary im Jahr 1977 mit dem Bachelor of Science in Informatik ab. Sechs Jahre später erhielt er den Doktortitel. Während seiner Doktorarbeit schrieb er 1981 den ersten Emacs für Unix-Systeme in C. Seine Implementierung wurde unter dem Namen Gosling Emacs (Gosmacs) bekannt. Neben Compilern und Mailsystemen erfand er bei Sun Microsystems in den 80ern gemeinsam mit David S. H. Rosenthal auch das nicht mehr weiterentwickelte Windowing-System „NeWS (Network extensible Window System)“, welches ursprünglich unter dem Namen SunDew bekannt war.</p>



<p>Bei seiner Arbeit von 1984 bis 2010 arbeitete Gosling bei Sun Microsystems, in dieser Zeit entwarf er auch das originäre Design von Java. Den Grundstein für diese Programmiersprache hatte er bereits während seines Studiums gelegt. Dort entwickelte er auch eine virtuelle CPU, die P-Code als Maschinensprache ausführte. Das Konzept dieser Pseudo-Maschine übertrug Gosling später auf die architekturneutrale Ausführung weitverbreiteter Programme.</p>



<p>Im Jahr 2005 erhielt Gosling den Titel zum Chief Technical Officer der Produktentwicklung bei Sun Microsysems.</p>



<h3 class="wp-block-heading">Java als Open Source bzw. Freie Software</h3>



<p>Sun hatte zugesichert, die JDK unter der GNU General Public License zu veröffentlichen. mit der Übernahme durch Oracle wurde auch die offene Lizenzierung übernommen. Am 13. November 2006 haben sie erste Teile der JDK bereits mit dem Compiler javac und der Hotspot Virtual Machine als <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open Source</a> veröffentlicht. Zudem hat man mit OpenJDK eine Community-Seite eröffnet, mit deren Hilfe man die Entwicklung koordinierte. Am 8. Mai 2007 folgten große Teile des „Java-SE“-Quellcodes zum Erstellen eines JDK. Eine Ausnahme stellte solcher Code dar, für den Sun nicht die nötigen Rechte besaß, um diesen freizugeben. Dieser liegt somit nur in kompilierter Form vor. Ebenfalls kündigte Sun an, dass Entwicklungen auf Grundlage des OpenJDK das „Java Compatible“-Logo führen, wenn sie nach dem „Java Compatibility Kit“ (JCK) zertifiziert sind.</p>



<p>Zuvor hat man den Quelltext von Java unter anderem bei jedem JDK mitgeliefert und ermöglichte so zwar Einsicht, doch man durfte diesen nicht beliebig modifizieren. Aus diesem Grund gibt es neben den offiziellen JCP auch diverse unabhängige Vereinigungen, die es sich zum Ziel gesetzt haben, ein unter einer freien <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open-Source</a>-Lizenz gestelltes Java bereitzustellen. Die bekanntesten dieser Projekte sind Apache Harmony, Kaffe und das GNU-Classpath-Projekt gewesen. Gegenwärtig gibt es neben OpenJDK noch eine weitere große Implementierung, die aktuelle Java Releases veröffentlicht, Eclipse OpenJ9. Diese JVM-Implementierung hat IBM an die Eclipse Foundation übergeben. OpenJ9 steht mehrfachlizenziert unter EPL 2.0, Apache 2.0 und GNU 2.0 with Classpath Exception zur Verfügung. Darüber aber mehr in meinem Eclipse Beitrag.</p>



<p>Java ist mitunter eines der populärsten Programmiersprachen. In dem seit 2001 veröffentlichten TIOBE-Index lag Java bis 2020, konkurrierend mit C, stets auf den ersten beiden, seit 2021 mit zusätzlicher Konkurrenz von <a href="https://ceosbay.com/2022/12/20/erklaerung-python/" target="_blank" rel="noreferrer noopener">Python</a>, auf den ersten drei Plätzen des Rankings. Nach dem RedMonk-Programmiersprachenindex 2019 liegt Java zusammen mit <a href="https://ceosbay.com/2022/12/20/erklaerung-python/" target="_blank" rel="noreferrer noopener">Python</a> auf dem zweiten Platz nach <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>.</p>



<h3 class="wp-block-heading">Das Grundkonzept von Java</h3>



<p><strong>Der Entwurf der Programmiersprache strebte hauptsächlich fünf Ziele an:</strong></p>



<ol class="wp-block-list" type="1">
<li><strong>Sie soll eine einfache, objektorientierte, verteilte und vertraute Programmiersprache sein.</strong><br>Java ist im Vergleich zu anderen objektorientierten Programmiersprachen wie C++ oder C# einfacher, da es einen reduzierten Sprachumfang besitzt und beispielsweise Operatorüberladung und Mehrfachvererbung nicht unterstützt.<br></li>



<li><strong>Sie soll robust und sicher sein.</strong><br>Viele der Designentscheidungen bei der Definition von Java reduzieren die Wahrscheinlichkeit ungewollter Systemfehler. Beispiele dafür sind die starke Typisierung, Garbage Collection, Ausnahmebehandlung sowie der Verzicht auf Zeigerarithmetik. Für die Sicherheit stehen Konzepte wie der Class-Loader, der die sichere Zuführung von Klasseninformationen zur Java <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/" target="_blank" rel="noreferrer noopener">Virtual Machine</a> steuert und der Security-Manager, die sicherstellen, dass nur Zugriff auf Programmobjekte erlaubt wird, für die entsprechende Rechte vorhanden sind.<br></li>



<li><strong>Sie soll architekturneutral und portabel sein.<br></strong>Java ist so entwickelt, dass dieselbe Version eines Programms prinzipiell auf einer beliebigen Computerhardware läuft, unabhängig von ihrem Prozessor oder anderen Hardwarebestandteilen. Zusätzlich zur Architekturneutralität ist es portabel. Folglich sind elementare Datentypen sowohl in ihrer Größe und der internen Darstellung als auch in ihrem arithmetischen Verhalten standardisiert. Beispielsweise ist ein float immer ein IEEE 754 Float von 32 Bit Länge. Dasselbe gilt beispielsweise auch für die Klassenbibliothek, mit deren Hilfe man eine vom Betriebssystem unabhängige GUI erzeugen kann.<br></li>



<li><strong>Sie soll sehr leistungsfähig sein.<br></strong>Java hat aufgrund der Optimierungsmöglichkeit zur Laufzeit das Potenzial, eine bessere Performance als auf Compilezeit-Optimierungen begrenzte Sprachen (C++ und andere Sprachen) zu erreichen. Dem entgegen steht der Overhead durch die Laufzeitumgebung, sodass die Leistungsfähigkeit von beispielsweise C++-Programmen in einigen Kontexten übertroffen, in anderen aber nicht erreicht wird. Um die Leistungsfähigkeit zu gewährleisten, kann man in der Java Virtual Machine (JVM) die Performance messen.<br></li>



<li><strong>Sie soll interpretierbar, parallelisierbar und dynamisch sein.<br></strong>Wie mehrfach erwähnt, finden die Kompilierung im maschinenunabhängigen Bytecode statt. Dieser wiederum kann auf der Zielplattform interpretiert werden. Die Java Virtual Machine interpretiert Bytecode, bevor sie es aus Performancegründen kompiliert und optimiert. Die Parallelisierbarkeit erreicht es durch die Unterstützung von Multithreading. Also durch den parallelen Ablauf von eigenständigen Programmabschnitten. Dazu bietet die Sprache selbst die Schlüsselwörter synchronized und volatile – Konstrukte, die das „Monitor &amp; Condition Variable Paradigma“ von C. A. R. Hoare unterstützen. Die Klassenbibliothek enthält weitere Unterstützungen für parallele Programmierung mit Threads. Moderne JVMs bilden einen Java-Thread auf Betriebssystem-Threads ab und profitieren somit von Prozessoren mit multiplen Rechenkernen. Die Dynamik erreicht es durch den Aufbau. Vor allem durch die Dynamik bzw. der Anpassungsfähigkeit an sich ändernde Rahmenbedingungen anzupassen. Da die Module erst zur Laufzeit gelinkt werden, können beispielsweise Teile der Software (etwa Bibliotheken) neu ausgeliefert werden, ohne die restlichen Programmteile anpassen zu müssen. Man kann Interfaces als Basis für die Kommunikation zwischen zwei Modulen einsetzen, während sich die eigentliche Implementierung dynamisch und beispielsweise auch während der Laufzeit ändern kann.</li>
</ol>



<h3 class="wp-block-heading">Objektorientierung</h3>



<p>Die Grundidee der objektorientierten Programmierung ist, Daten und zugehörige Funktionen möglichst eng in einem sogenannten Objekt zusammenzufassen und nach außen hin zu kapseln (Abstraktion). Die Absicht dahinter ist, große Softwareprojekte einfacher zu verwalten und die Qualität der Software zu erhöhen. Ein weiteres Ziel der Objektorientierung ist ein hoher Grad der Wiederverwendbarkeit von Softwaremodulen.</p>



<p>Ein neuer Aspekt von Java gegenüber beispielsweise der objektorientierten Programmiersprache C++ ist die explizite Unterscheidung zwischen Schnittstellen und Klassen, die man durch entsprechende Schlüsselwörter interface und class ausdrückt. Es unterstützt kein Erben von mehreren unabhängigen Basisklassen (sogenannte „Mehrfachvererbung“ wie in C++ oder Eiffel üblich), wohl aber das Implementieren einer beliebigen Zahl von Schnittstellen, womit sich viele der entsprechenden Probleme lösen lassen. Dabei kann man Methodensignaturen und Standardimplementierungen von Methoden an die abgeleiteten Klassen weitergeben, jedoch keine Attribute.</p>



<p>Es ist nicht vollständig objektorientiert, da die Grunddatentypen (int, boolean usw.) keine Objekte sind. Dies hängt mit der Syntax zusammen. Die Semantik, Grammatik und Syntax von Java sind in der Java Language Specification (Java-Sprachspezifikation) von Sun Microsystems dokumentiert. Das folgende Beispielprogramm gibt die unter Entwicklern bzw. Programmierern klassische Meldung „Hallo Welt!“, gefolgt von einem Zeilenumbruch, auf dem Ausgabemedium aus. Mittels Autoboxing kann man in die entsprechenden Objekttypen und umgekehrt umwandeln.</p>



<h3 class="wp-block-heading">Reflexion</h3>



<p>Reflexion (englisch reflection) bedeutet in der Programmierung, dass ein Programm die eigene Struktur kennt (englisch introspection) und/oder diese modifizieren kann (englisch intercession). Auch Java bietet eine Reflexion-API als Bestandteil der Laufzeitumgebung an. Damit ist es möglich, zur Laufzeit auf Klassen und Methoden zuzugreifen, deren Existenz oder genaue Ausprägung zur Zeit der Programmerstellung nicht bekannt war. Häufig wird diese Technik im Zusammenhang mit dem Entwurfsmuster Fabrikmethode (Factory Method) angewandt.</p>



<h3 class="wp-block-heading">Annotationen</h3>



<p>Annotationen erlauben die Notation von Metadaten und ermöglichen bis zu einem gewissen Grad benutzerdefinierte Spracherweiterungen. Sinn der Annotationen ist unter anderem die automatisierte Erzeugung von Code und anderen in der Software-Entwicklung wichtigen Dokumenten für wiederkehrende Muster anhand kurzer Hinweise im Quelltext. Früher hat man dafür ausschließlich Javadoc-Kommentare mit speziellen JavaDoc-Tags verwendet, deren Auswerung von Doclets wie zum Beispiel dem XDoclet stattgefunden hat.</p>



<p>Annotationen können auch in den kompilierten Class-Dateien enthalten sein. Für die Verwendung wird der Quelltext folglich nicht benötigt. Insbesondere sind die Annotationen auch über die Reflection-API zugänglich. Man kann sie beispielsweise zur Erweiterung des Bean-Konzeptes verwenden. Doch darüber schreibe ich in naher Zukunft einen gesonderten Beitrag.</p>



<h3 class="wp-block-heading">Wo findet Java Einsatz?</h3>



<p><strong>Webanwendungen</strong></p>



<p>Anwendungen, die man auf einem Webserver lädt, startet und die beim Benutzer in einem Webbrowser ablaufen bzw. dargestellt werden. Üblicherweise läuft ein Teil der Webanwendung auf dem Server (die Geschäftslogik und Persistenz) und ein anderer Teil im Webbrowser (die Logik der grafischen Benutzeroberfläche). Der Serverteil wird üblicherweise vollständig in Java geschrieben, der Browserteil üblicherweise in <a href="https://ceosbay.com/2022/12/29/erklaerung-html/" target="_blank" rel="noreferrer noopener">HTML</a> und <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>. Es ist jedoch auch möglich, Java-Webanwendungen inklusive GUI-Logik vollständig in Java zu schreiben (siehe z. B. Google Web Toolkit oder die Remote Application Platform). Bekannte Beispiele für Java-Webanwendungen sind Twitter, Jira, <a href="https://ceosbay.com/2022/12/18/erklaerung-jenkins/" target="_blank" rel="noreferrer noopener">Jenkins</a>. Zwar nicht vollständig, aber Gmail ist zu großen Teilen auch damit geschrieben.</p>



<p><strong>Desktop-Anwendungen</strong></p>



<p>Unter Desktop-Anwendungen oder Applikationen fasst man normale Desktop-Programme zusammen. Sowohl Internet-Kommunikationsprogramme als auch Spiele und/oder Office-Anwendungen, die auf einem normalen PC laufen, haben diese Bezeichnung. Bekannte Beispiele für Java-Desktop-Anwendungen sind die integrierte Entwicklungsumgebung Eclipse oder das mittlerweile von Microsoft aufgekaufte Computerspiel Minecraft.</p>



<p><strong>Applets</strong></p>



<p>Java-Applets sind Anwendungen, die man normalerweise in einem Webbrowser ausführt. Sie sind üblicherweise auf einen durch ein spezielles <a href="https://ceosbay.com/2022/12/29/erklaerung-html/" target="_blank" rel="noreferrer noopener">HTML</a>-Tag definierten Bereich einer Webseite beschränkt. Voraussetzung für die Ausführung der Applets ist ein Java-fähiger Browser. Eine Unterstützung dieser Anwendungsform liegt seit der Version 11 nicht mehr vor.</p>



<p><strong>Apps</strong></p>



<p>Apps sind kleinere Applikationen für mobile Endgeräte wie Handys, Smartphones, PDAs oder Tablets. Sie laufen üblicherweise auf speziellen, für die Ausführung von Java-Anwendungen optimierten Plattformen wie Java ME. Native Apps für das Android Betriebssystem von Google sind in der Regel auch damit programmiert, basieren aber auf einer abweichenden Klassenbibliotheks-API.</p>



<h2 class="wp-block-heading">Entwicklungsumgebungen</h2>



<p>Es gibt eine große Vielfalt von Entwicklungsumgebungen für Java, sowohl proprietäre als auch <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open Source</a>. Die meisten Entwicklungsumgebungen dafür sind selbst ebenfalls in Java geschrieben.</p>



<p>Die bekanntesten Open-Source-Umgebungen sind das von der Eclipse Foundation bereitgestellte Eclipse und das von Sun entwickelte NetBeans.</p>



<p>Unter den kommerziellen Entwicklungsumgebungen sind <a href="https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/" target="_blank" rel="noreferrer noopener">IntelliJ IDEA</a> von JetBrains, siehe meinen Beitrag, JBuilder von Borland sowie JCreator und das auf NetBeans basierende Sun ONE Studio von Sun, am verbreitetsten. Außerdem gibt es noch eine Version von Eclipse, die von IBM unter dem Namen WebSphere Studio Application Developer („WSAD“) vertrieben wurde und ab Version 6.0 Rational Application Developer („RAD“) heißt. Auch in XCode von Apple lässt sich damit schreiben. Doch zu empfehlen ist es eher nicht, da es primär für C++ und C optimiert ist.</p>



<p>Sehr viele Texteditoren bieten Unterstützung dafür, darunter Emacs, jEdit, Atom (Ist aufgrund eines Hacks nicht mehr verfügbar 😉 ), Visual Studio Code, Vim und Notepad++, über die ich in zukünftigen Beiträgen schreibe.</p>



<h3 class="wp-block-heading">Compiler</h3>



<p>Ein Compiler übersetzt Java-Quellcode (Dateiendung „.java“) in einen ausführbaren Code. Grundsätzlich unterscheidet man zwischen Bytecode- und Nativecode-Compilern. Einige Laufzeitumgebungen verwenden einen JIT-Compiler, um zur Laufzeit den Bytecode häufig genutzter Programmteile in nativen Maschinencode zu übersetzen.</p>



<p><strong>Bytecode Compiler</strong></p>



<p>Im Normalfall übersetzt der Java-Compiler die Programme in einen nicht direkt ausführbaren Bytecode (Dateiendung „.class“), den die Java Runtime Environment (JRE) später ausführt. Die HotSpot-Technologie kompiliert den Bytecode zur Laufzeit in nativen Prozessorcode und optimiert diesen abhängig von der verwendeten Plattform. Diese Optimierung findet dabei nach und nach statt, sodass der Effekt auftritt, dass Programmteile nach mehrmaliger Abarbeitung schneller werden. Andererseits führt diese Technik, die ein Nachfolger der Just-in-time-Kompilierung ist, dazu, dass man mit Java-Bytecode, Anwendungen theoretisch genauso schnell wie nativ kompilierte Programme ausführen kann.</p>



<p><strong>Native Compiler</strong></p>



<p>Es existieren auch Compiler für Java, die Quelltexte oder den Bytecode in „normalen“ Maschinencode übersetzen können, sogenannte Ahead-of-time-Compiler. Nativ kompilierte Programme haben den Vorteil, keine JavaVM mehr zu benötigen aber auch den Nachteil, nicht mehr plattformunabhängig zu sein.</p>



<p>Beispiele für native Java Compiler waren Excelsior JET (eingestellt, bis Java SE 7), sowie GNU Compiler for Java (GCJ, eingestellt, bis J2SE 5.0) wie MinGW, Cygwin oder JavaNativeCompiler (JNC).</p>



<p><strong>Wrapper</strong></p>



<p>Als weitere Möglichkeit kann das Java-Programm in ein anderes Programm „eingepackt“ (englisch to wrap) werden. Unter anderem nennt man dies auch Adapter. Diese äußere Hülle dient dann als Ersatz für ein Java-Archiv. Sie sucht selbständig nach einer installierten Java-Laufzeitumgebung, um das eigentliche Programm zu starten und informiert den Benutzer darüber, wo er eine Laufzeitumgebung herunterladen kann, sofern noch keine installiert ist. Es ist also immer noch eine Laufzeitumgebung nötig, um das Programm starten zu können, aber der Anwender erhält eine verständliche Fehlermeldung, die ihm weiterhilft.</p>



<p>Java Web Start ist ein etwas eleganterer und standardisierter Ansatz für diese Lösung. Es ermöglicht die einfache Aktivierung von Anwendungen und garantiert, dass immer die neueste Version der Anwendung ausgeführt wird. Dadurch bleiben einem durch die Automatisierung komplizierte Installations- oder Aktualisierungsprozeduren erspart.</p>



<p>Beispiele für Java-Wrapper sind JSmooth oder Launch4J. JBuilder von Borland und NSIS sind ebenfalls in der Lage, einen Wrapper für Windows zu erstellen.</p>



<h3 class="wp-block-heading">Fazit</h3>



<p>Ein Fazit gibt es hierfür nicht, da ich es mir nicht anmaße, etwas zu beurteilen, dass ich noch nicht zu einem großen Teil verstehe. In diesem Zusammenhang vielleicht in den zukünftigen Beiträgen zu finden.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java &#8211; Endlose Möglichkeiten der Softwareentwicklung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/16/erklaerung-java/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1168</post-id>	</item>
		<item>
		<title>Jenkins &#8211; Automatisierte Arbeitsabläufe beim Testing</title>
		<link>https://ceosbay.com/2022/12/18/erklaerung-jenkins/</link>
					<comments>https://ceosbay.com/2022/12/18/erklaerung-jenkins/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sun, 18 Dec 2022 07:35:48 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[CD]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[CIFS]]></category>
		<category><![CDATA[Continious]]></category>
		<category><![CDATA[Deploy]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[Foundation]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Hudson]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Machine]]></category>
		<category><![CDATA[Maschine]]></category>
		<category><![CDATA[Microservice]]></category>
		<category><![CDATA[Microservices]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsystems]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[Pipeline]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Sun]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[VM]]></category>
		<category><![CDATA[Win]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=999</guid>

					<description><![CDATA[<p>Jenkins ist ein webbasiertes Open Source Tool bzw. Software-System, für Continuous Integration und Continuous Delivery (CI/CD). Es dient der Automatisierung und für DevOps. Geschrieben ist es in der Programmiersprache Java. Es lassen sich damit CI/CD-Workflows &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/18/erklaerung-jenkins/">Jenkins &#8211; Automatisierte Arbeitsabläufe beim Testing</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Jenkins ist ein webbasiertes <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a> Tool bzw. Software-System, für <a href="https://ceosbay.com/2023/04/14/erklaerung-ci-cd/" target="_blank" rel="noreferrer noopener">Continuous Integration und Continuous Delivery</a> (<a href="https://ceosbay.com/2023/04/14/erklaerung-ci-cd/" target="_blank" rel="noreferrer noopener">CI/CD</a>). Es dient der Automatisierung und für <a href="https://ceosbay.com/2023/03/02/erklaerung-devops/" target="_blank" rel="noreferrer noopener">DevOps</a>. Geschrieben ist es in der Programmiersprache Java. Es lassen sich damit <a href="https://ceosbay.com/2023/04/14/erklaerung-ci-cd/" target="_blank" rel="noreferrer noopener">CI/CD</a>-Workflows bzw. sogenannte Pipelines implementieren. Es wird als Fork der Software Hudson von Sun Microsystems, heute Oracle, betrachtet.</p>



<h3 class="wp-block-heading">Kurze Zeitreise</h3>



<p>Jenkins ist in erster Linie eine Entwicklung von Kohsuke Kawaguchi. Einem ehemaligen Mitarbeiter von Sun Microsystems, der es unter dem Namen Hudson entwickelt hat. Kawaguchi verließ das Unternehmen, nachdem Oracle es Ende Januar 2010 übernahm. Er behielt aber die Leitung bei Hudson und arbeitete nach eigenen Angaben auf freiberuflicher Basis weiter bei Oracle. Oracle hielt nach wie vor die Namensrechte an Hudson. Aus diesem Grund hat man das Projekt schließlich in Jenkins umbenannt. Die Namensgebung erfolgte laut der Entwickler aufgrund der äquivalenten Assoziation der beiden Wörter mit dem Beruf des Butlers.</p>



<p>Oracle trieb die Entwicklung von Hudson weiterhin voran. Deshalb spricht man heute von einem Fork (einer „Abspaltung“) in der Softwareentwicklung. Im Jahr 2016 wurde die Entwicklung von Hudson zugunsten von Jenkins eingestellt und der Eclipse Foundation gespendet. Die Entwicklung wird jetzt als <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-Projekt unter der Leitung der <a href="https://cd.foundation" target="_blank" rel="noreferrer noopener">CD Foundation</a>, einer Organisation innerhalb der <a href="https://www.linuxfoundation.org" target="_blank" rel="noreferrer noopener">Linux Foundation</a>, verwaltet.</p>



<h3 class="wp-block-heading">Wofür Pipelines?</h3>



<p>Im Grunde genommen automatisieren Pipelines Tests und Berichte zu isolierten Änderungen in einer größeren Codebasis in Echtzeit und erleichtern die Integration unterschiedlicher Codezweige in einen Hauptzweig. Man erkennt dadurch schnell Fehler in einer Codebasis, erstellt die Software, automatisiert das Testen der Builds, bereitet die Codebasis für die Bereitstellung (Auslieferung) vor und stellt schließlich Code in Containern und auf <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">virtuellen Maschinen</a> sowie Bare-Metal- und <a href="https://ceosbay.com/2022/11/30/erklaerung-cloud-computing/">Cloud</a>-Servern bereit. Es gibt auch kommerzielle Versionen von Jenkins, auf die ich in diesem Beitrag aber nicht weiter eingehe.</p>



<h3 class="wp-block-heading">Continious Integration / Kontinuierliche Integration</h3>



<p>Kontinuierliche Integration hat sich seit der Erfindung weiterentwickelt. Ursprünglich war es die Norm, dass Teams einen Build pro Tag veröffentlichten. Nun ist es die Regel, dass jedes Teammitglied täglich oder häufiger Aktualisierungen einreicht, die man als Commit bezeichnet (Siehe <a href="https://ceosbay.com/2022/11/18/erklaerung-git/">Git</a> / <a href="https://ceosbay.com/2022/11/19/erklaerung-github/">GitHub</a>). Dies erfolgt bei jeder wesentlichen Änderung eines Builds. Bei der richtigen Anwendung bietet Continuous Integration verschiedene Vorteile, wie zum Beispiel ständige Rückmeldungen zum Status der Software. Da man durch CI, Mängel frühzeitig in der Entwicklung erkennt, sind Fehler in der Regel kleiner, weniger komplex und leichter zu beheben.</p>



<h3 class="wp-block-heading">Jenkins und CI/CD</h3>



<p>Im Laufe der Zeit wurden Jenkins <a href="https://ceosbay.com/2023/04/14/erklaerung-ci-cd/" target="_blank" rel="noreferrer noopener">Continuous Delivery und Deployment</a> hinzugefügt. <a href="https://ceosbay.com/2023/04/14/erklaerung-ci-cd/" target="_blank" rel="noreferrer noopener">Continuous Delivery</a> bedeutet, dass das Erstellen und Packen von Code für die spätere Bereitstellung in Test-, Produktions-Staging- und Produktionsumgebungen automatisiert wird. <a href="https://ceosbay.com/2023/04/14/erklaerung-ci-cd/" target="_blank" rel="noreferrer noopener">Continuous Deployment</a> automatisiert den letzten Schritt der Bereitstellung des Codes an seinem endgültigen Ziel.</p>



<p>In beiden Fällen reduziert die Automatisierung die Anzahl der auftretenden Fehler, da die richtigen Schritte und Best Practices in Jenkins kodiert sind. Jenkins beschreibt einen gewünschten Zustand und der Automatisierungsserver stellt sicher, dass dieser Zustand erreicht wird. Darüber hinaus macht diese Automatisierung die Bereitstellung schneller, da Vorgänge nicht mehr an personelle Beschränkungen gebunden sind. Schließlich reduziert es die Belastung des Entwicklungs- und Betriebsteams, indem es die Notwendigkeit von manuellen Rollouts mitten in der Nacht und am Wochenende beseitigt.</p>



<h3 class="wp-block-heading">Jenkins und Microservices</h3>



<p>Jenkins bewährt sich besonders in Microservices-Architekturen. Da es eines der Ziele von Microservices ist, Anwendungen und Dienste häufig zu aktualisieren, sollte man dafür sorgen, dass die Bandbreite die Releases nicht verzögert. Mehr und kleinere Dienste mit schnelleren Update-Intervallen lassen sich nur durch Automatisierung gut umsetzen – und dafür ist es wohl die richtige Wahl.</p>



<h3 class="wp-block-heading">Jenkins X</h3>



<p>Das Jenkins X-Projekt wurde 2018 mit dem Ziel gestartet, eine moderne, <a href="https://ceosbay.com/2022/11/30/erklaerung-cloud-computing/">Cloud</a>-native Version von Jenkins zu erschaffen. Das Projekt steht ebenfalls unter der Leitung der <a href="https://cd.foundation" target="_blank" rel="noreferrer noopener">CD Foundation</a>. Die Architektur, Technologie und Pipeline-Sprache unterscheiden sich grundsätzlich von Jenkins. Jenkins X ist für Kubernetes konzipiert und verwendet es in einer eigenen Implementierung. Andere <a href="https://ceosbay.com/2022/11/30/erklaerung-cloud-computing/">Cloud</a>-native Technologien, die Jenkins X verwendet, sind Helm und Tekton, auf die ich in gesonderten Beiträgen eingehen werde.</p>



<h3 class="wp-block-heading">Wie funktioniert Jenkins?</h3>



<p>Jenkins läuft auf einer Vielzahl von Betriebssystemen bzw. Plattformen. Darunter gibt es Windows, MacOS und Unix-Varianten. Am besten jedoch läuft es auf <a href="https://ceosbay.com/2022/11/22/erklaerung-linux/">Linux</a>. Es erfordert mindestens eine Java 8 <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">VM</a> oder höher und kann auf Oracle Java Runtime Environment oder Open Java Development Kit ausgeführt werden. Normalerweise läuft es als Java-Servlet innerhalb eines Jetty-Anwendungsservers. Es kann aber auch auf anderen Java-Anwendungsservern wie Apache Tomcat ausgeführt werden. Auch kann es in einem <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/">Docker</a>-Container ausgeführt werden. Im <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/">Docker</a> Hub-Online-Repository sind aus diesem Grund schreibgeschützte Jenkins-Images verfügbar.</p>



<p>Um Jenkins zu auszuführen, werden Pipelines erstellt. Eine Pipeline ist eine Reihe von Schritten, die der Jenkins-Server ausführt. Diese Schritte sind in einem Klartext-Jenkins-File gespeichert. Das Jenkins-File verwendet eine geschweifte Klammersyntax, die einer JSON gleicht. Schritte in der Pipeline werden als Befehle mit Parametern deklariert und in geschweiften Klammern gekapselt. Der Jenkins-Server liest dann die Jenkins-Datei und führt die Befehle aus, wobei der Code die Pipeline vom festgeschriebenen Quellcode zur Produktionslaufzeit weiterleitet. Ein Jenkins-File kann über eine grafische Benutzeroberfläche oder durch Code erstellt werden.</p>



<h3 class="wp-block-heading">Plugins</h3>



<p>Für Jenkins sind eine Reihe von Plugins verfügbar, damit es mit anderen Tools zusammenarbeiten kann. Mit Plugins lässt sich auch der Funktionsumfang der Software erweitern. Fertige bzw. bewährte Plugins können aus dem Online-Repository für Jenkins-PlugIns heruntergeladen und über die Jenkins-Webbenutzeroberfläche oder -CLI (Kommandozeile, Command Line Interface) geladen werden. Man kann aber auch eigene Plugins entwickeln.</p>



<p>Plugins helfen bei der Integration anderer Entwicklertools in die Jenkins-Umgebung, fügen der Web-UI neue Elemente hinzu. Dies dient im Allgemeinen der erleichterten Verwaltung und Benutzung. Ein wichtiges Einsatzgebiet von Plugins ist das Bereitstellen von Integrationspunkten für CI/CD-Quellen und -Ziele. Dazu gehören Software-Versionskontrollsysteme (SVCs) wie <a href="https://ceosbay.com/2022/11/18/erklaerung-git/">Git</a> und Atlassian BitBucket, Container-Laufzeitsysteme – insbesondere <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/">Docker</a>, sowie Hypervisoren wie VMware vSphere, Public-<a href="https://ceosbay.com/2022/11/30/erklaerung-cloud-computing/">Cloud</a>-Instanzen wie Google <a href="https://ceosbay.com/2022/11/30/erklaerung-cloud-computing/">Cloud</a> Platform und AWS und schließlich Private-<a href="https://ceosbay.com/2022/11/30/erklaerung-cloud-computing/">Cloud</a>-Systeme wie OpenStack. Es gibt auch Plugins, die eine Kommunikation mit Betriebssystemen über FTP, CIFS und SSH unterstützen.</p>



<p>Plugins verwenden ihren eigenen Satz von Java-Annotationen und Designmustern, die definieren, wie sie instanziiert werden. Die Plugin-Entwicklung nutzt außerdem die Maven-Bereitstellung für Jenkins.</p>



<h3 class="wp-block-heading">Sicherheit</h3>



<p>Bei der Sicherheit geht es vor allem darum den Server und die Benutzer zu schützen. Die Serversicherheit wird mehr oder weniger auf dieselbe Art und Weise erreicht, wie auf regulären Servern. Der Zugriff auf den Standort, beispielsweise eine <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">VM</a> oder einen Bare-Metal-Server, ist so konfiguriert, dass möglichst wenige Prozesse mit dem Server kommunizieren dürfen. Dies wird durch typische Serverbetriebssysteme und Netzwerksicherheitsfunktionen erreicht.</p>



<p>Darüber hinaus ist der Zugriff auf den Server über die Jenkins-Benutzeroberfläche mit den regulären Mechanismen, wie Multi-Faktor-Authentifizierung oder der Beschränkung der Anzahl von legitimierten Benutzern, geschützt.</p>



<p>Jenkins enthält außerdem Sicherheitsfunktionen für die interne Nutzerdatenbank. Man unterscheidet zwei Sicherheitsbereiche. Zum einen den Sicherheitsbereich und den Autorisierungsbereich. Im Sicherheitsbereich regeln Administratoren, wer Zugriff hat, und im Autorisierungsbereich bestimmen die Nutzer selbst, was man mit dem Zugriff anstellen kann.</p>



<h3 class="wp-block-heading">Fazit</h3>



<p>Ein großer Vorteil von Jenkins sind die Unmengen an verfügbaren Plugins. Diese tragen zu einer enormen Flexibilität bei. Auch die umfangreichen Skript- und deklarativen Sprachen, mit denen man stark benutzerdefinierte Pipelines erstellen kann, stellen einen großen Mehrwert dar. Da es weitestgehend neutral ist, passt es gut in die meisten Umgebungen, einschließlich in komplexe Hybrid- und Multi-<a href="https://ceosbay.com/2022/11/30/erklaerung-cloud-computing/">Cloud</a>-Systeme.</p>



<p>Da Jenkins schon etwas länger als vergleichbare Lösungen in diesem Bereich verwendet wird, gibt es umfangreiche Dokumentationen und zahlreiche Community-Ressourcen, an denen man sich bedienen kann. Diese Ressourcen erleichtern die Installation, Verwaltung und Fehlerbehebung ungemein.</p>



<p>Da die gesamte Lösung auf Java basiert, steht es auf einer soliden Basis, die man mit gängigen Designmustern und Frameworks erweitern kann. Auch wenn sich die Installation relativ einfach gestaltet, kann es relativ schwierig sein, komplexe Pipelines zu entwickeln, zu debuggen und zu warten.</p>



<p>Das <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-System ist außerdem eine Single-Server-Architektur. Dies kann jedoch die Ressourcen auf einen einzigen Computer, eine <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">virtuelle Maschine</a> oder einen Container einschränken. Cluster werden nicht unterstützt. Diese Tatsache kann die Leistung enorm einschränkten. Es kann auch dazu führen, dass es zum Server-Sprawl kommt und man den Überblick über all die einzelnen Jenkins-Server verliert.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/18/erklaerung-jenkins/">Jenkins &#8211; Automatisierte Arbeitsabläufe beim Testing</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/12/18/erklaerung-jenkins/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">999</post-id>	</item>
		<item>
		<title>Open Source &#8211; Wissen teilen und vermehren</title>
		<link>https://ceosbay.com/2022/11/16/erklaerung-open-source/</link>
					<comments>https://ceosbay.com/2022/11/16/erklaerung-open-source/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Wed, 16 Nov 2022 17:03:21 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Bildung]]></category>
		<category><![CDATA[Blockchain]]></category>
		<category><![CDATA[Buchempfehlung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Autor]]></category>
		<category><![CDATA[CEO]]></category>
		<category><![CDATA[Deutschland]]></category>
		<category><![CDATA[Diskriminierung]]></category>
		<category><![CDATA[Eric Raymond]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Freie]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Instagram]]></category>
		<category><![CDATA[IRC]]></category>
		<category><![CDATA[Libre]]></category>
		<category><![CDATA[Lizenz]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Neutralität]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Personen]]></category>
		<category><![CDATA[Produktneutralität]]></category>
		<category><![CDATA[Quellcode]]></category>
		<category><![CDATA[Quelle]]></category>
		<category><![CDATA[Red Hat]]></category>
		<category><![CDATA[SHARE]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Suse]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Technologieneutralität]]></category>
		<category><![CDATA[Umwelt]]></category>
		<category><![CDATA[Uneingeschränkt]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[USA]]></category>
		<category><![CDATA[UUCP]]></category>
		<category><![CDATA[Verantwortung]]></category>
		<category><![CDATA[Weiterverbreitung]]></category>
		<category><![CDATA[Welt]]></category>
		<category><![CDATA[Werke]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=557</guid>

					<description><![CDATA[<p>Heute kümmere ich mich um eines meiner Lieblingsthemen. Dafür werde ich mir auch ein bisschen mehr Zeit nehmen. Open Source (Offene Quelle) ist ein Begriff, der ursprünglich auf Open Source Software (OSS) zurückgeht. Dabei handelt &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source &#8211; Wissen teilen und vermehren</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Heute kümmere ich mich um eines meiner Lieblingsthemen. Dafür werde ich mir auch ein bisschen mehr Zeit nehmen. <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a> (Offene Quelle) ist ein Begriff, der ursprünglich auf <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a> Software (OSS) zurückgeht. Dabei handelt es sich um Quellcode bzw. Code, der für die Öffentlichkeit zugänglich ist. Folglich kann jeder den Code einsehen, anzeigen, nach Belieben verändern und verteilen. <br>Ganz im Sinne von &#8222;Das Wissen der Menschheit gehört der Welt&#8220;.</p>



<h3 class="wp-block-heading">Was ist Open Source Software?</h3>



<p><a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source Software</a> wird in der Regel dezentral, innerhalb einer Kollaboration entwickelt und stützt sich auf Peer-Review. Eine von Fachkollegen begutachtete Veröffentlichung wird als Peer(s) und Community-Produktion bezeichnet. Die Software ist nicht selten kostenlos bzw. günstiger, flexibler und langlebiger als proprietäre Produkte. Vor allem, weil sie nicht von einem einzelnen Programmierer oder Unternehmen, sondern in und durch Communities entwickelt wird. In der Regel verstehen die diese Personen etwas von ihrem Handwerk.</p>



<p>Open Source hat sich in der jüngeren Vergangenheit zu einer Bewegung geformt. Geradezu zu einer neuen Art des Arbeitens und des Lifestyles, die über die reine Softwareproduktion hinausgeht. Sie nutzt die Werte, sowie das dezentrale Produktionsmodell der Open Source Software, um neue Wege zu finden, Probleme in Communities, diversen Branchen und des Alltags zu lösen.</p>



<h3 class="wp-block-heading">Kriterien für Open Source</h3>



<p>Doch allein der freie Zugang zum Quellcode reicht nicht aus, damit eine Software als Open-Source-Software deklariert werden kann. Folgende Kriterien müssen ebenfalls erfüllt sein:</p>



<p><strong>Freie Weiterverbreitung</strong> &#8211; Die Lizenz muss es jedermann erlauben, die Software weiterzugeben oder als Teil einer Sammlung zu verkaufen. Man darf keine Lizenzgebühren verlangen.</p>



<p><strong>Zugang zum Quellcode</strong> &#8211; Die Software muss im Quelltext in verständlicher Form verfügbar sein.</p>



<p><strong>Zulässigkeit von abgeleiteten Werken</strong> &#8211; Die Lizenz muss Modifikationen und Weiterentwicklungen zulassen und deren Weitergabe unter denselben Bedingungen erlauben wie die Original-Software.</p>



<p><strong>Integrität des Quellcodes des Autors</strong> &#8211; Zwar muss die Lizenz die Weitergabe von Software mit verändertem Quellcode zulassen, darf aber verlangen, dass abgeleitete Werke einen anderen Namen oder eine andere Versionsnummer tragen müssen.</p>



<p><strong>Keine Diskriminierung von Personen oder Gruppen</strong> &#8211; Die Lizenz darf keine Personen oder Personengruppen benachteiligen.</p>



<p><strong>Keine Nutzungseinschränkung</strong> &#8211; Die Lizenz darf die Nutzung der Software nicht für bestimmte Zwecke oder Tätigkeitsbereiche ausschließen, etwa den Einsatz in Unternehmen.</p>



<p><strong>Allgemeingültigkeit der Lizenz bei Weitergabe</strong> &#8211; Die Lizenz muss für alle gelten, an die die Software weitergegeben wird. Es dürfen keine zusätzlichen Lizenzen vergeben werden.</p>



<p><strong>Produktneutralität der Lizenz</strong> &#8211; Die Lizenz darf nicht davon abhängen, ob die Software ein Bestandteil einer bestimmten Distribution ist. Sie muss auch dann gelten, wenn das Programm eigenständig verwendet oder zusammen mit anderer Software weiterverbreitet wird.</p>



<p><strong>Keine Einschränkung anderer Software</strong> &#8211; Die Lizenz darf keine Einschränkungen für andere Software enthalten, die zusammen mit der lizenzierten Software weitergegeben wird.</p>



<p><strong>Technologieneutralität</strong> &#8211; Die Lizenz darf die Weitergabe der Software nicht auf eine bestimmte Technologie beschränken.</p>



<h3 class="wp-block-heading"><strong>Wie ist Open Source entstanden?</strong></h3>



<p>In den Anfängen der Informatik, etwa in den 50er bzw. 60er Jahren, tauschten Wissenschaftler, Programmierer und Entwickler Software aus, um voneinander zu lernen und um die Informatik weiterzuentwickeln. Zu den frühen Beispielen für die freie Weitergabe von Quellcode gehören auch die von <a href="https://www.ibm.com/de-de">IBM</a> herausgegebenen Quelltexte seiner Betriebssysteme und anderer Programme sowie die SHARE-Benutzergruppe, die sich bildete, um den Austausch von Software zu erleichtern. </p>



<p>Ab den 60er Jahren nutzten ARPANET-Forscher ein offenes &#8222;Request for Comments&#8220;-Verfahren (RFC), um Rückmeldungen zu frühen Telekommunikationsnetzprotokollen zu fördern. Dies führte 1969 zur Entstehung des frühen Internets. Die gemeinsame Nutzung von Quellcode im Internet begann, als das Internet noch relativ primitiv war, mit Software, die über UUCP, Usenet, IRC (Werde ich demnächst auch mal thematisieren. Denn damit ging es auch bei mir los 😉 ) und Gopher verbreitet wurde. BSD zum Beispiel wurde auch zuerst durch Beiträge in comp.os.linux im Usenet verbreitet, wo auch die Entwicklung diskutiert wurde. Linux folgte diesem Modell. </p>



<p>Zwischen den 70er und 80er Jahren wurde der Open-Source-Gedanke schließlich von der Kommerzialisierung der Software verdrängt. Akademiker entwickelten jedoch weiterhin häufig Software in Zusammenarbeit. Beispiele hierfür sind Donald Knuth 1979 mit dem TeX-Satzsystem und Richard Stallman 1983 mit dem GNU-Betriebssystem. </p>



<p>1997 veröffentlichte Eric Raymond () das Buch „The Cathedral and the Bazaar“ (Dies ist gleichzeitig eine Buchempfehlung und stellt eine Bildungslücke dar, falls bisher noch nicht gelesen! Besonders, wenn man in der IT tätig ist!), eine reflektierende Analyse der Hacker-Gemeinschaft und der Grundsätze freier Software. Das Whitepaper fand Anfang 1998 große Beachtung. Es war ein wesentlicher Faktor, der die Netscape Communications Corporation dazu veranlasste, ihre beliebte Internet-Suite Netscape Communicator als freie Software zu deklarieren und zu veröffentlichen. Die Netscape Communications Corporation war ein unabhängiges amerikanisches Unternehmen, für Computerdienstleistungen mit Hauptsitz in Mountain View, Kalifornien, und anschließend in Dulles, Virginia. Dieser Quellcode wird später zur Grundlage von SeaMonkey, Mozilla Firefox, Thunderbird und KompoZer, die heute noch im Einsatz sind.</p>



<p>Das Vorgehen von Netscape veranlasste wiederum Eric Raymond und andere dazu, sich mit der Frage zu beschäftigen, wie man die Ideen der Free Software Foundation und die von ihr erkannten Vorteile, für die kommerzielle Softwareindustrie nutzbar machen kann. Sie kamen zu dem Entschluss, dass der soziale Aktivismus der FSF, für Unternehmen wie Netscape nicht attraktiv war. Also suchten sie nach einer Möglichkeit, der Freien-Software-Bewegung einen neuen Namen zu geben. Dies sollte das geschäftliche Potenzial des Austausches und der Zusammenarbeit an Software-Quellcode voll ausschöpfen. </p>



<p>Dies war die Geburtsstunde des Bergriffs &#8222;<a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a>&#8222;. Die Definition wurde bald darauf von Bruce Perens, einem amerikanischen Programmierer und Verfechter der Bewegung für freie Software definiert, manifestiert und veröffentlicht. Der Verleger Tim O&#8217;Reilly machte unter Anderem den Begriff <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a> relativ schnell populär. Und Linus Torvalds, ein finnisch-US-amerikanischer Informatiker sowie Software-Entwickler, der bis heute als Initiator und als treibende Kraft bei der Entwicklung des Linux-Kernels gilt. Der Kernel bzw. die Arbeitsmethodik wird von vielen anderen genau so weitergeführt. Die Entwicklung wird übrigens bis heute noch von ihm koordiniert.</p>



<p>Im Februar 1998 die Gründung der OSI (<a href="https://opensource.org" target="_blank" rel="noreferrer noopener">Open Source Initiative</a>). Sie sollte die Verwendung des neuen Begriffs fördern und die Open-Source-Prinzipien propagieren. Was in Anbetracht der gegenwertigen Situation auch ganz gut gelungen ist. Vor allem wenn man bedenkt, wie viele große Konzerne damals zu <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a> Software Stellung bezogen haben. Und wie sie heute selbst <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a> Software nutzen. Dazu aber nachfolgend mehr.</p>



<p>Zur gleichen Zeit sahen sich kommerzielle Softwarehersteller zunehmend durch das Konzept der frei verteilten und erhältlichen Software und des allgemeinen Zugangs zum Quellcode einer Anwendung bedroht. Der Microsoft-Manager Jim Allchin, ein amerikanischer Informatiker und ehemalige Führungskraft bei Microsoft, erklärte 2001 öffentlich: &#8222;<a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a> ist ein Zerstörer geistigen Eigentums. Ich kann mir nichts Schlimmeres für das Softwaregeschäft und das Geschäft mit dem geistigen Eigentum vorstellen.&#8220; Oder Steve Ballmer (CEO von Microsoft von 2000 bis 2014), der 2001, bei einem Interview, Linux als Krebs bezeichnete.</p>



<h3 class="wp-block-heading">Open Source Software heute</h3>



<p>Freie und quelloffene Software hat Anfangs eine Rolle außerhalb des Mainstreams eine Rolle gespielt.  Also eher in der privaten Softwareentwicklung. Größere Unternehmen wie Microsoft, Google, Facebook, IBM, Oracle usw. hatten begonnen, offizielle Open Source &#8222;Plattformen&#8220; im Internet aufzubauen. Damit haben sich die ehemaligen „Gegner“ auf die ein oder andere Art der Bewegung für freie und quelloffene Software angeschlossen. </p>



<p>Dadurch hat sich die Sichtweise auf Open-Source-Software grundlegend geändert. Hinzu kommt, dass auch von denen Konzernen viel Kapital und Resourcen in die Entwicklung von Open Source Software fließen. Zu den Mitwirkenden, Geldgebern und gemeinnützigen Organisationen an Open-Source-Projekten gehören unter anderem die Linux Foundation, die WordPress Foundation, Creative Commons, das Android Open Source Project und die Mozilla Foundation. Auch Epic Games hat in den letzten Jahren nicht wenig Geld in Blender und dessen Weiterentwicklung gesteckt. Doch das Thema Blender werde ich in den kommenden Wochen auch in Angriff nehmen und in einem Beitrag festhalten.</p>



<h3 class="wp-block-heading">Beliebte Open Source Software &#8222;Lizenzen&#8220;</h3>



<p><strong>MIT License©</strong>: MIT License ist eine freie Softwarelizenz. Nutzern ist es erlaubt, den Originalcode mit sehr wenigen Einschränkungen zu verändern.<br><strong>GNU General Public© (GPL)</strong>: GNU ist eine Reihe von Lizenzen für freie Software. Es gibt Endbenutzern die Möglichkeit, Software auszuführen, zu untersuchen, weiterzugeben und zu verändern.<br><strong>BSD</strong>: Die BSD Lizenz hat weniger Beschränkungen für Entwickler. Es erlaubt den Nutzern, den Code zu verwenden und zu verändern, ohne die Änderungen weitergeben zu müssen.<br><strong>Ubuntu®</strong>: Ubuntu ist eine Linux-Distribution, die aus freier und Open-Source-Software besteht. Es wird primär in den Bereichen Desktop, Cloud und IoT veröffentlicht.<br><strong>Red Hat</strong>: Eine Open-Source-Softwareplattform und ein IBM-Derivat, das eine Vielzahl von Produktivitätsanwendungen für Unternehmen bietet.<br><strong>Blender</strong>: Blender ist eine freie, mit der GPL lizenzierte 3D-Grafiksuite, mit der sich 3D-Körper modellieren, texturieren und animieren lassen. Die Inhalte finden in Grafiken, Animationen und Software Anwendung. Geschaffene Bildsynthesen können mithilfe des integrierten Compositors und Videoschnittprogramms nachbearbeitet werden. Programmiersprachen, die zum Einsatz kommen sind C und C++. Python wird als Skriptsprache verwendet.<br><strong>Mozilla</strong>: Die Mozilla Public License ist eine freie und quelloffene schwache Copyleft-Lizenz. Für die meiste Software der Mozilla Foundation wie Firefox und Thunderbird. Die MPL-Lizenz ist von Mozilla und die Entwicklung bzw. Pflege, findet In-House statt.<br><strong>SUSE</strong>: SUSE Linux basiert auf einem Open-Source-Linux-Kernel und wird mit System- und Anwendungssoftware vertrieben.<br><strong>LibreOffice</strong>: Ein Open-Source-Büroprogramm, das den Microsoft Office-Programmen ähnelt.<br><strong>Apache®</strong>: Die Apache License ist eine freie Softwarelizenz. Sie erlaubt den Nutzern, die Software für jeden Zweck zu verwenden, zu verändern und zu verbreiten.<br><strong>Berkeley Software Distribution</strong>: Ist ein Betriebssystem, das auf Research Unix basiert. Die Computer Systems Research Group an der University of California, Berkeley, entwickelt und kümmert sich um den Vertrieb.<br><strong>MySQL™</strong>: MySQL ist ein Open-Source-Datenbankverwaltungssystem mit zwei separaten Lizenzen &#8211; der MySQL Standard Edition und der MySQL Enterprise Edition.</p>



<h3 class="wp-block-heading">Nachteile von Open Source Software</h3>



<p>Obwohl Open Source Software und die Lizenzen enorm zum Wachstum der Softwareentwicklung und der Entwicklung der internationalen IT-Landschaft beigetragen haben, wird ihre weite Verbreitung nicht von Wenigen als negativ erachtet. Dies wird auf die fehlende Regulierung zurückgeführt, die zu zahlreichen juristischen Problemen führen kann. Auch bezüglich der Definition, was als Open Source und was Closed Source deklariert werden kann, stellt einen wesentlichen Problemfaktor dar. </p>



<p>Um diesen Umständen entgegenzuwirken hat die Open-Source-Gemeinschaft Klassifizierungsschemata eingeführt, die in der Regel auf Copyleft-Bestimmungen (Um ein Programm unter das Copyleft zu stellen, wird es zuerst unter ein Copyright gestellt; danach werden als Rechtsmittel Vertriebsbestimmungen hinzugefügt, die es allen erlauben, den Quellcode des Programms oder jedes davon abgeleiteten Programms zu verwenden, zu ändern und weiter zu verteilen) beruhen, um geeignete Anwendungsfälle für das Open-Source-Softwareentwicklungsmodell zu bestimmen. </p>



<p>Das US-Bundesberufungsgericht, entschied darüber hinaus, dass OSS-Lizenzen rechtsverbindliche Anforderungen für die Nutzung von urheberrechtlich geschütztem Material enthalten müssen. Findet durch einen Benutzer ein Regelverstoß gegen diese offenen Standards statt, verliert er seine Lizenz und verstößt damit gegen die Norm für Urheberrechtsverletzungen, ähnlich wie bei der unbefugten Nutzung einer proprietären Lizenz. Die Folgen dafür können gravierend sein.</p>



<h3 class="wp-block-heading">Übrigens: Open Source vs. freie Software</h3>



<p>“Open Source” und “Freie Software” bezeichnen im Wesentlichen das Gleiche. Der Begriff “Freie Software” ist lediglich etwas älter (1985) und stammt von der Free Software Foundation. Der Gedanke der frei zugänglichen Software ist gleich, nur die Motivation dahinter ist verschieden. Bei Open Source ist es der praktische Nutzen, der durch die gemeinsame Weiterentwicklung von Software entsteht. Bei der freien Software ist es die Ideologie dahinter und der Nutzen für den Anwender.</p>



<h3 class="wp-block-heading">Fazit</h3>



<p>Ich bin davon überzeugt, dass das Wissen der Menschheit der Welt gehört und durch das Wissen auch die Vermittlung von Bildung besser vonstattengehen kann. So dient das Wissen auch der Fähigkeitsvermittlung, bei der eine Gesamtheit der Fähigkeiten zum Tragen kommt. Bildung wiederum hat auch eine moralische Funktion. </p>



<p>Daher kann durch Bildung die Voraussetzung dafür geschaffen werden, dass Menschen eher Verantwortung für sich selbst, sowie für andere in ihrem Umfeld und ihrer Umwelt übernehmen. Kurz: Mithilfe von Wissen und Bildung kann ein Mensch eher zwischen Gut und Böse unterscheiden. Ohne Wissen und Bildung funktioniert keine moderne Software oder Demokratie. Und dies sind nun einmal die Schlüssel für ein gutes Miteinander, zu Arbeit und Beruf in unserer heutigen Zeit. </p>



<p>Deshalb muss sowohl Wissen als auch die Bildung kostenlos zugänglich gemacht werden &#8211; Damit auch Quellcodes von Software. Dies alles mag zwar auf dem ersten Blick etwas verzerrt wirken, doch wenn man bedenkt, dass viele Menschen ihr Wissen heutzutage fast ausschließlich aus dem Internet bzw. von den digitalen Medien beziehen, kann es meiner Meinung nach durchaus Sinn machen. Aber ich lasse mich auch gerne jederzeit eines Besseren belehren 😉</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source &#8211; Wissen teilen und vermehren</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/11/16/erklaerung-open-source/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">557</post-id>	</item>
		<item>
		<title>JavaScript &#8211; Die Sprache für interaktive und dynamische Webanwendungen</title>
		<link>https://ceosbay.com/2022/11/12/javascript/</link>
					<comments>https://ceosbay.com/2022/11/12/javascript/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sat, 12 Nov 2022 06:00:00 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Acrobat]]></category>
		<category><![CDATA[Anwendungsentwicklung]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Bibliotheken]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Codestruktur]]></category>
		<category><![CDATA[Deklarativ]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Dynamisch]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Geschichte]]></category>
		<category><![CDATA[Heute]]></category>
		<category><![CDATA[Imperativ]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Multiparadigmisch]]></category>
		<category><![CDATA[Multipragmatisch]]></category>
		<category><![CDATA[Objektorientiert]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Paradigmen]]></category>
		<category><![CDATA[Programmierer]]></category>
		<category><![CDATA[Quellcode]]></category>
		<category><![CDATA[Reac]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Semantik]]></category>
		<category><![CDATA[Single]]></category>
		<category><![CDATA[Thread]]></category>
		<category><![CDATA[Three]]></category>
		<category><![CDATA[ThreeJs]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=510</guid>

					<description><![CDATA[<p>JavaScript ist eine der bekanntesten Skriptsprachen für Websites. Es ist eine leichtgewichtige, interpretierte und just-in-time kompilierte Software-Sprache, die erstklassige Funktionen nutzt. Viele Nicht-Browser-Umgebungen wie Adobe Acrobat, Apache CouchDB und Node.JS® nutzen JavaScript. Diese weit verbreitete &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript &#8211; Die Sprache für interaktive und dynamische Webanwendungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>JavaScript ist eine der bekanntesten Skriptsprachen für Websites. Es ist eine leichtgewichtige, interpretierte und just-in-time kompilierte Software-Sprache, die erstklassige Funktionen nutzt. Viele Nicht-Browser-Umgebungen wie Adobe Acrobat, Apache CouchDB und <a href="https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/">Node.JS®</a> nutzen JavaScript. Diese weit verbreitete Software-Sprache ist prototypenbasiert, deklarativ, imperativ, stark objektorientiert, single-thread, dynamisch und multiparadigmatisch. Die genannten Begriffe werden nachfolgend erklärt aber zu einem späteren Zeitpunkt in einen anderen Beitrag, bei dem ich verschiedene Paradigmen vorstelle, verschoben.</p>



<h3 class="wp-block-heading">Prototypenbasierte Programmierung</h3>



<p>Prototypenbasierte Programmierung, auch als klassenlose Objektorientierung bekannt, ist eine Form der objektorientierten Programmierung, die auf das Sprachelement der Klasse verzichtet. Objekte werden nicht durch Instanziierung (Der&nbsp;Prozess des Lesens oder des Angebens von Informationen) einer Klasse, sondern durch Klonen bereits existierender Objekte erzeugt. Bei diesem Klonen werden alle Eigenschaften (Attribute und Methoden) des Prototyp-Objektes kopiert. Sie können aber überschrieben werden, und das neue Objekt kann mit neuen Eigenschaften versehen werden. Hierzu aber in einem anderen Beitrag mehr.</p>



<h3 class="wp-block-heading">Deklarative Programmierung</h3>



<p>In der Informatik ist die deklarative Programmierung ein Programmierparadigma &#8211; ein Stil zum Aufbau der Struktur und der Elemente von Computerprogrammen -, dass die Logik einer Berechnung ausdrückt, ohne ihren Kontrollfluss zu beschreiben. Folglich wird im Quellcode festgelegt, was in welcher Reihenfolge und wie zu tun ist: „First do this and next do that / Erst dies und dann das tun“.  Ich werde dieses Thema aber noch in einem anderen Beitrag ausführlich behandeln.</p>



<h3 class="wp-block-heading">Imperative Programmierung</h3>



<p>Die Imperative Programmierung ist ein Programmierparadigma, nach dem „ein Programm aus einer Folge von Anweisungen besteht, die vorgeben, in welcher Reihenfolge was vom Computer getan werden soll. Auch dieses Thema wird später noch in einem anderen Beitrag genauer thematisiert.</p>



<h3 class="wp-block-heading">Objektorientierte Programmierung</h3>



<p>Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee besteht darin, die Architektur einer Software an den Grundstrukturen desjenigen Bereichs der Wirklichkeit auszurichten, der die gegebene Anwendung betrifft. Eines der wichtigsten Programmierparadigmen unserer Zeit. Ich werde noch einige Beiträge zur objektorientierten Programmierung erstellen.</p>



<h3 class="wp-block-heading">Single-thread</h3>



<p>In der Informatik bezeichnet Thread einen Ausführungsstrang oder eine Ausführungsreihenfolge in der Abarbeitung eines Programms. Ein Thread ist Teil eines Prozesses. In meiner Jugend kannte man diesen Begriff noch in Zusammenhang mit Multithreading bei Prozessoren. War damals für uns wie ein Traum. Aber auch zu diesen Begrifflichkeit in einem anderen Beitrag mehr.</p>



<h3 class="wp-block-heading">Dynamische Programmierung</h3>



<p>Die dynamische Programmierung dient zur Lösung eines Optimierungsproblems durch algorithmische Verfahren. Das Problem wird in Teilprobleme zergliedert und es werden systematisch Zwischenergebnisse gespeichert. Auch hierzu in einem späteren Beitrag mehr.</p>



<h3 class="wp-block-heading">Multiparadigmatische Programmiersprachen</h3>



<p>Eine Multiparadigmen Programmiersprache ist eine Programmiersprache, die zur Problemlösung mit verschiedenen Programmierparadigmen die geeigneten Sprachmittel besitzt.</p>



<h3 class="wp-block-heading">Java = / ≠ JavaScript</h3>



<p>Sowohl Java als auch JavaScript sind in den USA und anderen Ländern eingetragene Marken von Oracle. Sie sind aber keineswegs identisch. Obwohl sie ähnlich klingen, sind sie in Bezug auf Syntax, Semantik und Anwendung der Sprache im wirklichen Leben sehr unterschiedlich.</p>



<h3 class="wp-block-heading">Geschichte</h3>



<p>Brendan Eich (Ein Programmierer der Netscape Communication Corporation) hat JavaScript 1995 entwickelt. Offenbar brauchte er etwa 10 Tage, um Mocha zu entwickeln. Später wurde der Name der Sprache in Mona und dann in LiveScript geändert. Derzeit ist sie allgemein als JavaScript bekannt. 1996 wurde es von der ECMA übernommen, die JavaScript mit der ECMAScript Language Specification und den ECMAScript Internationalized API Spezifikationen versah. Im Jahr 2005 traten Eich und Mozilla der ECMA bei, und die JavaScript-Gemeinschaft blühte auf. Im Jahr 2016 nutzten 92 % der Websites JavaScript, von großen Tech-Giganten wie Facebook und Google bis hin zu kleinen Start-Ups, wie <a href="https://www.coezbay.com" target="_blank" rel="noreferrer noopener">meines</a>.</p>



<h3 class="wp-block-heading">Heute</h3>



<p>Derzeit wird die Sprache immer noch überall eingesetzt und ist eine der am häufigsten verwendeten clientseitigen Skriptsprachen. Von 1995 bis heute hat JavaScript einen langen Weg zurückgelegt. Heutzutage wird es innerhalb von HTML-Elementen geschrieben, um Dynamik in Webprojekten und konventionellen Desktop-Anwendungen zu ermöglichen. So ziemlich alle Echtzeit Onlinespiele beinhalten die Sprache. Viele andere Technologien wurden auf der Grundlage von JavaScript entwickelt, zum Beispiel <a href="https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/">NodeJS®</a> &#8211; welches ich in einem anderen Beitrag kurz angeschnitten habe, React &#8211; was ich in einem anderen Beitrag thematisieren werde. JavaScript ist zwar alt und hat eine komplexe Vergangenheit, doch genau diese Tatsache haben wir es zu verdanken, dass sie auch enorm großes Spektrum an Bibliotheken und Frameworks bietet. Hierzu nachfolgend mehr.</p>



<h3 class="wp-block-heading">JavaScript-Bibliotheken</h3>



<p><a href="https://dev.to/t/discuss"></a>Um die Programmierung zu erleichtern, gibt es, wie bereits erwähnt, Unmengen an sogenannter JavaScript-Bibliotheken und -Frameworks. Diese Bibliotheken werden verwendet, um Code für komplexere Funktionalitäten schneller schreiben zu können. Sie ermöglichen es Entwicklern, vorgefertigte Code-Snippets zu nutzen und eigene Code-Snippets für die zukünftige Verwendung zu erstellen und zu speichern. Wenn man solch eine Bibliothek für seine eigenen Routinen erstellt hat und Herr dieser Daten ist, sind auch Zeit- als auch Arbeitsersparnisse die daraus resultieren immens. Beispiele für JavaScript-Bibliotheken sind: jQuery, ReactJS, Google Polymer, Dojo-Toolkit und Three.js. Wobei Three.js eine browserübergreifende JavaScript-Bibliothek und gleichzeitig eine Anwendungsprogrammierschnittstelle zur Erstellung und Anzeige animierter 3D-Computergrafiken in einem Webbrowser mit WebGL darstellt. Letzteres ist eines meiner Lieblingsdinge, mit denen ich mich beruflich als auch privat gerne beschäftige.</p>



<h3 class="wp-block-heading">JavaScript-Frameworks</h3>



<p>JavaScript-Frameworks sind Vorlagen, die eine Codestruktur vorgeben, der man folgen kann. Dadurch wird die Entwicklung teilweise erleichtert. Doch gleichzeitig schränkt es einen auch in gewisser Weise ein, da man als Entwickler gewisse Regeln beachten muss. Beispiele für JavaScript-Frameworks sind. beispielsweise Vue.js, AngularJS und Apache Royale.</p>



<p>Übrigens: Wenn JavaScript ohne die Verwendung von Bibliotheken oder Frameworks geschrieben, wird es als „Vanilla-JavaScript“ bezeichnet.</p>



<h3 class="wp-block-heading">Clientseitiges JavaScript und serverseitiges JavaScript</h3>



<p>JavaScript kann sowohl clientseitig als auch serverseitig genutzt werden. Clientseitiges JavaScript ermöglicht die Manipulation von Browsern und Webseiten. Es führt das Skript im Browser des Nutzers aus und ist eine der häufigsten Verwendungsformen von JavaScript. Ich habe hierzu in einem anderen <a href="https://ceosbay.com/2022/10/30/aus-alt-mach-neu/">Beitrag</a> ein paar Zeilen geschrieben bzw. es findet in der Three.js Web-Anwendung statt, die im Header Bereich <a href="https://cagatayoezbay.com">meiner persönlichen Website</a> zum Einsatz kommt.</p>



<p>Serverseitiges JavaScript läuft nicht im Browser, sondern auf dem Server. Generell ist es weniger verbreitet als clientseitiges JavaScript. Ein Beispiel für ein beliebtes serverseitiges Scripting-Framework für JavaScript ist <a href="https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/">NodeJS®</a>.</p>



<h3 class="wp-block-heading">Fazit</h3>



<p>JavaScript ist eine der wichtigsten Programmiersprachen. Sie ist sehr dynamisch und wird sowohl in der Anwendungs-, Frontend- als auch in der Backend-Webentwicklung verwendet.</p>



<p>Angesichts der möglichen Auswirkungen auf die Geschwindigkeit und Performance der Anwendung oder Webseite ist es wichtig zu verstehen, wie JavaScript funktioniert. Anhand von Best Practices kann man lernen, effektiver zu programmieren und die Leistung seiner Anwendungen und Webseiten zu verbessern. Auch in Bezug auf SEO (Search Engine Optimization = Suchmaschinenoptimierung &#8211; Die Maßnahmen, die dazu dienen, um die Sichtbarkeit einer Webseite und ihrer Inhalte für Benutzer einer Suchmaschine bzw. die Auffindbarkeit zu erhöhen) spielt dies eine sehr große Rolle. Aber das Thema SEO werde ich in einem späteren Beitrag thematisieren.<br></p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript &#8211; Die Sprache für interaktive und dynamische Webanwendungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/11/12/javascript/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">510</post-id>	</item>
		<item>
		<title>Virtuelle Maschinen &#8211; Flexibilität und Effizienz durch nahtlose Systemintegration und isolierte Umgebungen</title>
		<link>https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/</link>
					<comments>https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 10 Nov 2022 15:07:49 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Betriebssystem]]></category>
		<category><![CDATA[Client]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Computer System]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[EMC]]></category>
		<category><![CDATA[Emulator]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Hypervisor]]></category>
		<category><![CDATA[Informationstechnologie]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[IT-System]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Multi-Boot]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Netzwerktechnik]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Parallels]]></category>
		<category><![CDATA[Penetration]]></category>
		<category><![CDATA[ProxMox]]></category>
		<category><![CDATA[Prozessor]]></category>
		<category><![CDATA[Red Hat]]></category>
		<category><![CDATA[Remote]]></category>
		<category><![CDATA[Risiko]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Virtualisierung]]></category>
		<category><![CDATA[Virtuelle Maschinen]]></category>
		<category><![CDATA[VMs]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=411</guid>

					<description><![CDATA[<p>Eine Virtuelle Maschine bzw. Virtuelle Maschinen (VM) ist ein (OS = Operating System) oder eine Anwendungsumgebung, die auf einem bestehenden Betriebssystem auf der Software-Ebene installiert ist und eine dedizierte Hardware ausführt. Nicht zu verwechseln mit &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">Virtuelle Maschinen &#8211; Flexibilität und Effizienz durch nahtlose Systemintegration und isolierte Umgebungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Eine Virtuelle Maschine bzw. Virtuelle Maschinen (VM) ist ein (OS = Operating System) oder eine Anwendungsumgebung, die auf einem bestehenden Betriebssystem auf der Software-Ebene installiert ist und eine dedizierte Hardware ausführt. </p>



<h3 class="wp-block-heading">Nicht zu verwechseln mit einem Emulator</h3>



<p>Als Emulator wird in der Computertechnik ein System bezeichnet, das ein anderes Computer System in bestimmten Teilaspekten nachbildet. Dabei handelt es sich um keine Virtuelle Maschinen 😉</p>



<h3 class="wp-block-heading">Auch nicht zu verwechseln mit einem Simulator</h3>



<p>Ein Simulator wird dazu genutzt um eine Simulation auszuführen. Beispielsweise für die Nachbildung von realen Szenarien zum Zwecke der Ausbildung von Piloten im Flugsimulator. Auch von Ärzten und Pflegepersonal in einem Patientensimulator kommt ein Simulator zum Einsatz. Kriegs- bzw. Gefechtssimulationen bei Einsatzkräften der Polizei oder dem Militär, sind heutzutage auch schon normal. Die Simulation zur Analyse von Systemen, deren Verhalten für die theoretische, formelmäßige Behandlung zu komplex sind, finden ebenfalls Einsatz. Auch wenn diese Art von Simulation sich grundlegend von den vorher genannten unterscheidet. Und dann gibt es natürlich die Simulation in Spielen (Aber diesen Dingen bei späteren Beiträgen mehr). </p>



<h3 class="wp-block-heading">Der Hypervisor</h3>



<p>Man kann sich die Sache mit den Virtuellen Maschinen im Endeffekt so vorstellen wie einen oder mehrere Computer in einem Computer zu betreiben. Spezialisierte Software, die man als Hypervisor bezeichnet, emulieren die CPU- (Central Processing Unit = Prozessor), den Speicher-, die Festplatten-, die Sound-, Netzwerk- und andere Hardwareressourcen des Computers oder Servers vollständig und ermöglicht es virtuellen Maschinen, die Ressourcen gemeinsam zu nutzen oder aber vollkommen zu isolieren. </p>



<p>Der Hypervisor kann mehrere virtuelle Hardwareplattformen emulieren. Diese können voneinander isoliert sein, so dass virtuelle Maschinen zum Beispiel Unix-, <a href="https://ceosbay.com/2022/11/22/erklaerung-linux/" target="_blank" rel="noreferrer noopener">Linux</a>&#8211; und Windows-Betriebssysteme auf demselben zugrundeliegenden physischen Computer ausführen können. Mit der Virtualisierung kann man beispielsweise auch die Kostensenkung der IT-Infrastruktur erreichen. </p>



<p>Virtuelle Maschinen nutzen die Hardware effizienter, wodurch sich die benötigten Hardwarekomponenten, die damit verbundenen Wartungs- und Instandhaltungskosten, sowie der Energiebedarf sänken lassen. Sie verringern auch den Aufwand der Administration, da sich alles an einem Ort befindet. Auch nutzt sich virtuelle Hardware innerhalb der Virtuellen Maschinen nicht ab und mechanische Fehler sind ausgeschlossen. </p>



<p>Admins (Administratoren = Benutzer mit erweiterten Rechten in IT-Systemen) können die Vorteile virtueller Umgebungen nutzen, um Images (In der Computertechnik ist ein Image ein Systemabbild bzw. eine serielle Kopie des gesamten Zustands eines Computersystems, die in einer nichtflüchtigen Form wie einer Datei gespeichert ist), Backups (Sicherheitskopien), das Einrichten und die Bereitstellung neuer Computersysteme und grundlegende Systemverwaltungsaufgaben zu vereinfachen. </p>



<p>Virtuelle Maschinen erfordern keine spezielle Hardware und sind in der Regel bzw. je nach Anwendungsbereich und den Anwendungen, die ausgeführt werden sollen, nicht sehr ressourcenhungrig. Wobei dies stark von der Menge der ausgeführten Virtuellen Maschinen und der jeweiligen Konfigurationen abhängt. Zu den Vorteilen gehört unter Anderem auch die Flexibilität beim Verschieben der Instanzen zwischen diversen Servern oder Computersystemen.</p>



<h3 class="wp-block-heading">Administration</h3>



<p>Alles in allem sind Virtuelle Maschinen etwas Feines. Zumal jemand, der mehrere Betriebssysteme einer IT-Infrastruktur administrieren, orchestrieren bzw. verwalten muss, die Vorzüge diverser Betriebssysteme auf einem dedizierten System nutzen kann. Nichtsdestotrotz besteht das Risiko, falls systemrelevante Anwendungen plattformübergreifend auf einem dedizierten Server bzw. Computer ausgeführt werden, bei einer Überlastung oder einem Hardwarefehler alle Systeme die darauf abgebildet sind, in Mitleidenschaft zieht. Folglich macht es Sinn, auch Virtuelle Maschinen auf der Hardware-Ebene redundant zu betreiben.</p>



<h3 class="wp-block-heading">Wozu benötigt man Virtuelle Maschinen?</h3>



<p>Virtuelle Maschinen sind vielseitig einsetzbar. Eines der wichtigsten Aspekte ist, wie bereits erwähnt, die synchrone Nutzung unterschiedlicher Betriebssysteme. Diese Art der Nutzung trifft man häufig beim Testen von Software- bzw. Web-Anwendungen an. So ist es beispielsweise möglich, die Tests auf verschieden Systemen mit verschiedenster Hardware-Ausstattung auszuführen und die Resultate bzw. Laufzeitergebnisse auf einem primären System zu evaluieren und zu verwalten. Dies macht auch dann Sinn, wenn es sich um sicherheitsrelevante Anwendungen handelt, die beispielsweise in einer isolierten Umgebung ausgeführt werden sollen/müssen oder wenn man Penetrationstests (Penetrationstest, kurz Pentest(ing), ist der fachsprachliche Ausdruck für einen umfassenden Sicherheitstest einzelner Rechner oder Netzwerke jeglicher Größe) in diversen Netzwerkumgebungen und verschiedenen Betriebssystemen ausführen möchte.</p>



<h3 class="wp-block-heading">Virtuelle Maschinen und Multi-Boot-Systeme</h3>



<p>Als die Virtualisierung noch nicht existierte, musste man ein Computer-System mit mehreren Betriebssystemen immer wieder neu booten (Neustarten), um auf die verschiedenen Betriebssysteme zuzugreifen. Jedes dieser Betriebssysteme konnte zwar sowohl abhängig als auch unabhängig vom Dateisystem agieren, doch sie konnten immer nur einzeln zu einem bestimmten Zeitpunkt verwendet werden. Auch heute macht man dies nach wie vor so. Beispielsweise wenn man Software nutzen will, die ausschließlich auf einem spezifischen Betriebssystem wie MacOS, Windows oder <a href="https://ceosbay.com/2022/11/22/erklaerung-linux/" target="_blank" rel="noreferrer noopener">Linux</a> funktionsfähig ist, die Hardware-Ressourcen relativ begrenzt sind und die vollständige Kapazität des Systems für das spezifische Betriebssystem oder die Anwendungen benötigt werden. Nachteile sind hierbei, meiner Erfahrung nach, besonders auf Apple Geräten, die fehlenden oder fehlerhaften Treiber bzw. das geschlossene Ökosystem des Herstellers.</p>



<h3 class="wp-block-heading">Virtuelle Maschinen und Cloud Computing</h3>



<p>Mit dem Aufkommen der Cloud lassen sich die virtuellen Maschinen auch in der Cloud ausführen bzw. umziehen/migrieren. Dieses Thema werde ich aber in einem anderen Beitrag genauer bearbeiten, da ich mich derzeit auch in diesem Umfeld bewege.</p>



<h3 class="wp-block-heading">Virtuelle Maschinen und Container</h3>



<p>Container funktionieren nach einem ähnlichen Prinzip wie Virtuelle Maschinen &#8211; Bis auf die Hardware versteht sich. Doch dies habe ich bereits in dem <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/">Blog-Beitrag </a> über <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/">Docker</a> beschrieben. Hier ist auch der Beitrag über <a href="https://ceosbay.com/2022/12/24/erklaerung-kubernetes/" target="_blank" rel="noreferrer noopener">Kubernetes</a> zu empfehlen.</p>



<h3 class="wp-block-heading">Welche Virtuellen Maschinen gibt es?</h3>



<p>Zu den Hauptanbietern gehören wohl VMware, was heute als EMC unter dem Dach von Dell existiert, Oracle, Microsoft und Parallels. Ansonsten sind da noch Open-Source-VM-Lösungen wie Red Hat Virtualization oder ProxMox, die ich zusammen mit Azure auch noch in späteren Beiträgen thematisieren möchte. Nicht zu vergessen Virtual Box von Oracle, was ebenfalls als „Open Source“ zu haben ist.</p>



<p></p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">Virtuelle Maschinen &#8211; Flexibilität und Effizienz durch nahtlose Systemintegration und isolierte Umgebungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">411</post-id>	</item>
	</channel>
</rss>
